Ich möchte einen Algorithmus zur automatischen Modellauswahl implementieren. Ich denke über eine schrittweise Regression nach, aber alles wird funktionieren (es muss jedoch auf linearen Regressionen basieren).
Mein Problem ist, dass ich keine Methodik oder Open-Source-Implementierung finden kann (ich woke in Java). Die Methodik, die ich vorhabe, wäre ungefähr so:
- Berechnen Sie die Korrelationsmatrix aller Faktoren
- Wählen Sie die Faktoren aus, die eine geringe Korrelation zueinander aufweisen
- entfernen Sie die Faktoren, die einen niedrigen t-stat haben
- fügen Sie andere Faktoren hinzu (immer noch basierend auf dem niedrigen Korrelationsfaktor in 2.).
- Wiederholen Sie dies mehrmals, bis ein Kriterium (z. B. AIC) einen bestimmten Schwellenwert überschreitet oder keinen größeren Wert finden kann.
Mir ist klar, dass es dafür eine R-Implementierung gibt (stepAIC), aber ich finde den Code ziemlich schwer zu verstehen. Ich konnte auch keine Artikel finden, die die schrittweise Regression beschreiben.
Antworten:
Ich denke, dieser Ansatz ist falsch, aber vielleicht ist er hilfreicher, wenn ich erkläre, warum. Es ist durchaus verständlich, das beste Modell mit einigen Informationen zu einer großen Anzahl von Variablen kennenzulernen. Darüber hinaus ist es eine Situation, in der Menschen sich regelmäßig zu finden scheinen. Darüber hinaus behandeln viele Lehrbücher (und Kurse) zur Regression schrittweise Auswahlmethoden, was impliziert, dass sie legitim sein müssen. Leider ist dies nicht der Fall, und es ist ziemlich schwierig, diese Situation und dieses Ziel miteinander in Einklang zu bringen. Das Folgende ist eine Liste von Problemen mit automatisierten schrittweisen Modellauswahlverfahren (Frank Harrell zugeschrieben und von hier kopiert ):
Die Frage ist, was ist so schlimm an diesen Prozeduren? Warum treten diese Probleme auf? Die meisten Personen, die einen Grundkurs zur Regression absolviert haben, sind mit dem Konzept der Regression bis zum Mittelwert vertraut. Daher erkläre ich diese Probleme anhand dieses Konzepts . (Auch wenn dies auf den ersten Blick als unnatürlich erscheint, ich verspreche, dass es relevant ist.)
Stellen Sie sich einen High School Track Coach am ersten Probetag vor. Dreißig Kinder tauchen auf. Diese Kinder verfügen über eine gewisse Grundkompetenz, auf die weder der Trainer noch andere Personen direkten Zugriff haben. Infolgedessen kann der Trainer nur 100 m weit rennen. Die Zeiten sind vermutlich ein Maß für ihre inneren Fähigkeiten und werden als solche angesehen. Sie sind jedoch probabilistisch; Ein Teil davon, wie gut jemand abschneidet, basiert auf seinen tatsächlichen Fähigkeiten und ein Teil ist zufällig. Stellen Sie sich vor, die wahre Situation ist die folgende:
Die Ergebnisse des ersten Rennens sind in der folgenden Abbildung zusammen mit den Kommentaren des Trainers zu den Kindern dargestellt.
Beachten Sie, dass die Unterteilung der Kinder nach ihren Rennzeiten Überschneidungen bei ihren Fähigkeiten hinterlässt - diese Tatsache ist entscheidend. Nachdem er einige gelobt und andere angeschrien hat (wie es Trainer tun), lässt er sie wieder laufen. Hier sind die Ergebnisse des zweiten Rennens mit den Reaktionen des Trainers (nach dem gleichen Modell oben simuliert):
Beachten Sie, dass ihre intrinsische Fähigkeit identisch ist, die Zeiten jedoch relativ zum ersten Rennen sprangen. Aus der Sicht des Trainers tendierten diejenigen, die er angeschrien hatte, dazu, sich zu verbessern, und diejenigen, die er gelobt hatte, dazu, sich zu verschlechtern (ich habe dieses konkrete Beispiel aus dem Kahneman-Zitat auf der Wiki-Seite angepasst), obwohl die Regression zum Mittelwert eigentlich eine einfache mathematische Methode ist Folge der Tatsache, dass der Trainer Athleten für die Mannschaft auf der Grundlage einer Messung auswählt, die teilweise zufällig ist.
Was hat dies nun mit automatisierten (z. B. schrittweisen) Modellauswahltechniken zu tun? Das Entwickeln und Bestätigen eines Modells auf der Grundlage desselben Datensatzes wird manchmal als Datenbaggerung bezeichnet. Obwohl zwischen den Variablen eine gewisse Beziehung besteht und von stärkeren Beziehungen stärkere Punktzahlen erwartet werden (z. B. höhere t-Statistiken), handelt es sich um Zufallsvariablen, und die realisierten Werte enthalten Fehler. Wenn Sie also Variablen basierend auf höheren (oder niedrigeren) realisierten Werten auswählen, können diese aufgrund ihres zugrunde liegenden wahren Werts, Fehlers oder beider Werte ausgewählt werden. Wenn Sie so vorgehen, werden Sie genauso überrascht sein wie der Trainer nach dem zweiten Rennen. Dies gilt unabhängig davon, ob Sie Variablen auswählen, die auf einer hohen t-Statistik oder niedrigen Interkorrelationen basieren. Die Verwendung des AIC ist zwar besser als die Verwendung von p-Werten, da hierdurch das Modell für Komplexität benachteiligt wird. Der AIC selbst ist jedoch eine Zufallsvariable alles andere). Unglücklicherweise,
Ich hoffe das ist hilfreich.
quelle
Schauen Sie sich das Caret- Paket in R an. Es hilft Ihnen , schrittweise Regressionsmodelle (mit
method='lmStepAIC'
odermethod='glmStepAIC'
) zu validieren und zu verstehen, wie diese Modelltypen tendenziell eine schlechte Prognoseleistung aufweisen. Darüber hinaus können Sie diefindCorrelation
Funktion in Caret verwenden, um kollineare Variablen zu identifizieren und zu eliminieren, und dierfe
Funktion in Caret, um Variablen mit einer niedrigen t-Statistik zu eliminieren (verwendenrfeControl=rfeControl(functions=lmFuncs)
).Wie in den vorherigen Antworten erwähnt, können diese Methoden der Variablenauswahl jedoch Probleme bereiten, insbesondere wenn Sie sie iterativ ausführen. Stellen Sie unbedingt sicher, dass Sie Ihre Leistung an einem VOLLSTÄNDIG ausgegebenen Testgerät bewerten. Schauen Sie sich das Test-Set erst an, wenn Sie mit Ihrem Algorithmus zufrieden sind!
Schließlich ist es möglicherweise besser (und einfacher), ein Vorhersagemodell mit "eingebauter" Merkmalsauswahl zu verwenden, z. B. Kammregression, Lasso oder elastisches Netz. Versuchen Sie insbesondere das
method=glmnet
Argument für Caret und vergleichen Sie die kreuzvalidierte Genauigkeit dieses Modells mit demmethod=lmStepAIC
Argument. Ich gehe davon aus, dass ersteres zu einer wesentlich höheren Genauigkeit außerhalb der Stichprobe führt und Sie sich nicht um die Implementierung und Validierung Ihres benutzerdefinierten Variablenauswahlalgorithmus kümmern müssen.quelle
r
oderpython
? Ich würde es gerne ausprobieren.Ich stimme den von @gung beschriebenen Problemen voll und ganz zu. Aus realistischer Sicht ist die Modellauswahl jedoch ein echtes Problem, das einer echten Lösung bedarf. Folgendes würde ich in der Praxis anwenden.
Als Beispiel für die Verwendung dieser Methode in der realen Welt glaube ich, dass sie beim Netflix-Preis-Wettbewerb verwendet wurde.
quelle
Um die Frage zu beantworten, gibt es mehrere Möglichkeiten: 1) Alle Teilmengen nach AIC / BIC 2) Schrittweise nach p-Wert 3) Schrittweise nach AIC / BIC 4) Regularisierung wie LASSO (kann entweder auf AIC / BIC oder CV basieren 5) genetischer Algorithmus (GA) 6) andere? 7) Verwendung einer nicht-automatischen, theoretisch ("Fachwissen") orientierten Auswahl
Die nächste Frage wäre, welche Methode besser ist. Diese Veröffentlichung (doi: 10.1016 / j.amc.2013.05.016) gibt an, dass "alle möglichen Regressionen" die gleichen Ergebnisse für ihre vorgeschlagene neue Methode erbrachten und schrittweise schlechter sind. Eine einfache GA ist zwischen ihnen. In diesem Artikel (DOI: 10.1080 / 10618600.1998.10474784) wird die bestrafte Regression (Bridge, Lasso usw.) mit "jump-and-bounds" (scheint ein erschöpfender, aber schnellerer Suchalgorithmus zu sein) verglichen und außerdem festgestellt, dass "das Brückenmodell mit dem besten Modell von" übereinstimmt die Auswahl der Teilmenge nach der Sprungmethode “. Dieses Papier (doi: 10.1186 / 1471-2105-15-88) zeigt, dass GA besser ist als LASSO. In dieser Veröffentlichung (DOI: 10.1198 / jcgs.2009.06164) wurde eine Methode vorgeschlagen - im Wesentlichen ein Ansatz mit allen Teilmengen (basierend auf BIC), der jedoch die Rechenzeit auf clevere Weise verkürzt. Sie zeigen, dass diese Methode besser ist als LASSO. Interessanterweise ist dieses Papier (DOI: 10.1111 / j.1461-0248.2009.01361.
Insgesamt sind die Ergebnisse also gemischt, aber ich habe den Eindruck, dass GA sehr gut erscheint, obwohl schrittweise nicht allzu schlecht sein kann und es schnell geht.
Wie zu 7), die Verwendung von nicht-automatischen, theoretisch ("Fachwissen") orientierten Auswahl. Es ist zeitaufwändig und nicht unbedingt besser als die automatische Methode. Tatsächlich ist es in der Zeitreihenliteratur bekannt, dass automatisierte Verfahren (insbesondere kommerzielle Software) menschliche Experten "um ein erhebliches Maß übertreffen" (doi: 10.1016 / S0169-2070 (01) 00119-4, Seite 561, z. B. Auswahl verschiedener exponentieller Glättungen und ARIMA Modelle).
quelle
Hier ist eine Antwort aus dem linken Feld: Verwenden Sie anstelle der linearen Regression einen Regressionsbaum (rpart package). Dies ist für die automatische Modellauswahl geeignet, da Sie mit ein wenig Arbeit die Auswahl von cp automatisieren können, dem Parameter, der verwendet wird, um eine Überanpassung zu vermeiden.
quelle
Das lineare Modell kann durch Implementierung eines genetischen Algorithmus zur Auswahl der wertvollsten unabhängigen Variablen optimiert werden. Die Variablen werden im Algorithmus als Gene dargestellt, und das beste Chromosom (Satz von Genen) wird dann nach Kreuzungs-, Mutations- usw. Operatoren ausgewählt. Es basiert auf natürlicher Selektion - dann kann die beste 'Generation' überleben, mit anderen Worten, der Algorithmus optimiert die Schätzfunktion, die vom jeweiligen Modell abhängt.
quelle
Wir haben eine Funktion im R-Basisstatistikpaket, step (), die die Vorwärts-, Rückwärts- oder schrittweise Auswahl von Modellen basierend auf dem niedrigsten AIC vornimmt. Dies funktioniert auch für Faktorvariablen. Servert dies hier nicht den Zweck?
quelle
Ich sehe, dass meine Frage großes Interesse und eine interessante Debatte über die Gültigkeit des Ansatzes der automatischen Modellauswahl ausgelöst hat. Ich bin damit einverstanden, dass die Annahme des Ergebnisses einer automatischen Auswahl riskant ist, kann aber als Ausgangspunkt verwendet werden. Also hier ist, wie ich es für mein spezielles Problem implementiert habe, nämlich die besten n Faktoren zu finden, um eine gegebene Variable zu erklären
Auch dies ist sehr rau, es kann Möglichkeiten geben, die Methodik zu verbessern, aber das ist mein Ausgangspunkt. Ich poste diese Antwort in der Hoffnung, dass sie für jemand anderen nützlich sein kann. Kommentare sind willkommen!
quelle