Bisher habe ich kollineare Variablen als Teil des Datenvorbereitungsprozesses entfernt, indem ich Korrelationstabellen betrachtet und Variablen beseitigt habe, die über einem bestimmten Schwellenwert liegen. Gibt es eine akzeptiertere Art, dies zu tun? Außerdem ist mir bewusst, dass es nicht ideal ist, nur die Korrelation zwischen zwei Variablen gleichzeitig zu betrachten. Messungen wie VIF berücksichtigen die potenzielle Korrelation zwischen mehreren Variablen. Wie würde man systematisch Variablenkombinationen auswählen, die keine Multikollinearität aufweisen?
Ich habe meine Daten innerhalb eines Pandadatenrahmens und verwende die Modelle von sklearn.
python
multicollinearity
scikit-learn
orange1
quelle
quelle
Antworten:
Danke SpanishBoy - Es ist ein gutes Stück Code. @ilanman: Hiermit werden VIF-Werte überprüft und anschließend Variablen gelöscht, deren VIF mehr als 5 beträgt. Mit "Leistung" meine ich die Laufzeit. Der obige Code hat ungefähr 3 Stunden gedauert, um mit ungefähr 300 Variablen und 5000 Zeilen zu arbeiten.
Übrigens habe ich es modifiziert, um einige zusätzliche Schleifen zu entfernen. Außerdem habe ich es ein bisschen sauberer gemacht und den Datenrahmen mit reduzierten Variablen zurückgegeben. Diese Version reduzierte meine Laufzeit um die Hälfte! Mein Code ist unten - Ich hoffe, es hilft.
quelle
usdm
Methodevifstep
) für VIF und Laufzeit war wirklich cool. Wie ich bereits sagte, sind die obige und Ihre (um die Hälfte optimierte) Variante im Vergleich zu der R so langsam. Haben Sie noch andere Ideen, wie Sie noch optimieren können?Sie können versuchen, den folgenden Code zu verwenden:
Es funktioniert, aber ich mag die Leistung dieses Ansatzes nicht
quelle
Ich habe SpanishBoys Antwort ausprobiert und einige Fehler gefunden, als ich sie für einen Datenrahmen ausgeführt habe. Hier ist eine debuggte Lösung.
Ich hatte auch keine Probleme mit der Leistung, habe es aber nicht ausgiebig getestet.
quelle
RuntimeWarning: divide by zero encountered in double_scalars