Wie kann man schnell wichtige Variablen aus einem sehr großen Datensatz auswählen?

9

Ich habe einen Datensatz mit ungefähr 2.000 binären Variablen / 200.000 Zeilen und versuche, eine einzelne binär abhängige Variable vorherzusagen. Mein Hauptziel in dieser Phase ist nicht die Genauigkeit der Vorhersage, sondern die Identifizierung, welche dieser Variablen wichtige Prädiktoren sind. Ich möchte die Anzahl der Variablen in meinem endgültigen Modell auf ungefähr 100 reduzieren.

Gibt es einen relativ schnellen Weg, um die wichtigsten Variablen zu erhalten? randomForest scheint lange zu dauern.

Ich muss nicht alle 200.000 Beobachtungen verwenden, daher ist eine Stichprobe eine Option auf dem Tisch.

DevX
quelle
Meinen Sie mit "wichtigen" statt "genauen" Prädiktoren diejenigen, die die besten Kandidaten für die Erklärung des Ergebnisses und die Unterstützung beim Aufbau einer Theorie sind? Wenn ja, sind 100 erklärende Variablen eine sehr große Zahl - unerschwinglich groß. Theoriebildung und wahre Erklärung (anstatt bloße Vorhersage) würden wahrscheinlich erfordern, dass Sie die Anzahl der X auf 10 oder 15
reduzieren
2
@ rolando2 In einigen Anwendungen ist 100 überhaupt nicht groß. Zum Beispiel verweist die Literatur zum Zugang zu Hochgeschwindigkeitsbreitband auf ungefähr 150 Variablen (von vielen Hunderten analysierten), und alle sind vernünftig: Sie beziehen sich auf die Leichtigkeit der Technik (Gelände, Gesteinsart, Klima usw.) und auf die Wirtschaftlichkeit (SES usw.), zur Demografie, zur Geometrie der lokalen Verkehrsinfrastruktur, zur Politik (Steuer- und Geschäftsklima) usw. Ich glaube, dass viele Wirtschaftsmodelle in ähnlicher Weise viele hundert theoretisch wichtige Variablen enthalten können.
whuber
@whuber - Ich denke über Ihren Standpunkt nach ... Würden Sie zustimmen, dass ein ungewöhnlich engagierter, talentierter und erfahrener Analyst erforderlich ist, um die kausalen (und nicht nur prädiktiven) Rollen zu klären, die so viele Variablen spielen?
Rolando2
@rolando Sicher. 2000 Variablen sind viel Arbeit!
whuber

Antworten:

6

Sie können mit einem einfachen univariaten Filter beginnen und mithilfe der Kreuzvalidierung entscheiden, welche Variablen beibehalten werden sollen. Die sbfFunktion im caretPaket für R ist wirklich nützlich. Weitere Informationen finden Sie hier ab Seite 19.

Zach
quelle
Vielen Dank. Ich habe gerade die Zeitung gelesen und es scheint ein solider Ansatz zu sein. Ich habe jedoch einige Speicherprobleme auf meinem 64-Bit-4-MB-Speichersystem.
DevX
1
@ DevX: Wenn Sie zu viele Daten haben, können Sie versuchen, eine Stichprobe zu ziehen und Variablen basierend auf der Stichprobe auszuwählen?
Zach
13

Dies klingt nach einem geeigneten Problem für Lasso und Freunde, die schrumpfen und Variablen auswählen. Die Elemente des statistischen Lernens beschreiben Lasso und elastisches Netz für die Regression und, was für dieses Problem relevanter ist, die logistische Regression.

Die Autoren des Buches haben eine effiziente Implementierung von Lasso und elastischem Netz als R-Paket namens glmnet verfügbar gemacht . Ich habe dieses Paket zuvor für die binäre Datenanalyse mit Datenmatrizen von ungefähr 250.000 Zeilen verwendet, obwohl etwas weniger Spalten, aber tatsächlich Regressionen aller Spalten gegen alle anderen Spalten ausgeführt werden. Wenn die Datenmatrix auch spärlich ist, kann die Implementierung dies ebenfalls nutzen, und ich glaube, dass die Methode tatsächlich für den vollständigen OP-Datensatz funktionieren kann. Hier einige Kommentare zu Lasso:

  • 1
  • Die Auswahl des Abstimmungsparameters erfolgt häufig durch Kreuzvalidierung, aber auch ohne den Kreuzvalidierungsschritt kann das Verfahren möglicherweise eine gute Folge ausgewählter Variablen liefern, die durch den Strafparameter indiziert werden.
  • Der Nachteil bei der Variablenauswahl ist, dass Lasso bei der Auswahl von Variablen instabil sein kann, insbesondere wenn sie etwas korreliert sind. Die allgemeinere elastische Nettostrafe wurde erfunden, um diese Instabilität zu verbessern, löst das Problem jedoch nicht vollständig. Adaptives Lasso ist eine weitere Idee, um die Variablenauswahl für Lasso zu verbessern.
  • Die Stabilitätsauswahl ist eine allgemeine Methode, die von Meinshausen und Bühlmann vorgeschlagen wurde, um mit Methoden wie Lasso eine größere Stabilität der ausgewählten Variablen zu erreichen. Es erfordert eine Reihe von Anpassungen an Teilproben des Datensatzes und ist daher viel rechenintensiver.
  • Eine vernünftige Denkweise für Lasso ist die Methode zur Erzeugung eines eindimensionalen Satzes von "guten" Modellen, die von einem Modell mit einer Variablen bis zu einem komplizierteren Modell (das nicht unbedingt alle Variablen umfasst) reicht und durch den Strafparameter parametrisiert wird. Im Gegensatz dazu erzeugen univariate Filter nur eine Auswahl oder Reihenfolge guter Modelle mit einer einzelnen Variablen.

Für Python gibt es eine Implementierung in Scikit-Learn von Methoden wie Lasso und elastischem Netz.

NRH
quelle
Wenn die Anzahl der potenziellen Prädiktoren wie in GWAS sprunghaft ansteigt, können Sie außerdem Folgendes in diesem Artikel auswählen: Genomweite Assoziationsanalyse durch Lasso bestrafte logistische Regression
Nick Sabbe
@ NickSabbe, danke für diesen Hinweis. Es ist sehr nützlich. Im Kontext von GWAS und wahrscheinlich auch in anderen Kontexten mit einer großen Anzahl korrelierter Prädiktoren hörte ich, wie Sylvia Richardson die Bayes'sche Modellauswahl empfahl, basierend auf beispielsweise einigen Vergleichen mit der Stabilitätsauswahl. Die MCMC-Berechnungen waren jedoch sehr anspruchsvoll.
NRH
Ich denke, es lohnt sich, das adaptive Lasso mehr zu betonen, da es einfach zu implementieren ist (fast nur zwei Aufrufe anstelle von einem glmnetin R). Eine weitere Option ist Thresholding the Lasso, die ebenfalls recht einfach zu implementieren ist. Siehe Abschnitt 2.9 von springer.com/gp/book/9783642201912 .
Benjamin Christoffersen
2

Sie können für jede Variable einen logistischen Regressions- / Chi-Quadrat-Assoziationstest durchführen und nur diejenigen beibehalten, deren p-Wert unter einem bestimmten Wert liegt, z. B. .2.

Tal
quelle
4
Um ein Gefühl dafür zu bekommen, wie sich diese Empfehlung auswirken könnte, betrachten Sie einen Fall, in dem es 100 (sagen wir) wichtige Prädiktoren gibt (die stark mit der abhängigen Variablen korrelieren) und der Rest völlig unabhängig von der abhängigen Variablen und untereinander ist. Wenn Sie diejenigen mit p-Werten von weniger als 0,2 beibehalten, erhalten Sie ungefähr 100 + 0,2 * (2000-100) = 480 Variablen, von denen 380 wertlos sind. Bei kleinen Datensätzen wird dieser Ansatz manchmal als schneller Einstiegsbildschirm verwendet, kann hier jedoch nicht ernsthaft in Betracht gezogen werden.
whuber
Guter Punkt @whuber. Sie müssten Ihre Alpha-Stufe viel niedriger einstellen, um etwa 100 beizubehalten, aber dann könnten Sie Variablen verpassen, die möglicherweise nur die Anpassung für andere beeinflussen. Ein Wechsel von 2000 auf 480 könnte jedoch einfacher sein, wenn man so etwas wie zufällige Wälder betreibt.
Glen
Sie haben Recht, ein solches Screening hat seinen Wert - wenn es richtig funktioniert. 480 ist eine Reduktion, aber es gibt zusätzliche Probleme aufgrund der Möglichkeit hoher Korrelationen zwischen allen 2000 ursprünglichen Variablen. Dies kann dazu führen, dass einige oder alle der 100 richtigen Variablen nicht beibehalten werden, wie in einigen Antworten auf eine verwandte Frage dargestellt .
whuber