Random Forest - Wie gehe ich mit Überanpassung um?

41

Ich habe einen Informatik-Hintergrund, versuche mich aber Datenwissenschaft beizubringen, indem ich Probleme im Internet löse.

Ich habe in den letzten Wochen an diesem Problem gearbeitet (ca. 900 Zeilen und 10 Features). Anfangs habe ich die logistische Regression verwendet, jetzt bin ich zu zufälligen Wäldern gewechselt. Wenn ich mein Zufallswaldmodell mit meinen Trainingsdaten durchführe, erhalte ich wirklich hohe Werte für auc (> 99%). Wenn ich jedoch das gleiche Modell mit den Testdaten verwende, sind die Ergebnisse nicht so gut (Genauigkeit von ca. 77%). Dies lässt mich glauben, dass ich die Trainingsdaten überanpassung habe.

Was sind die bewährten Methoden zur Verhinderung einer Überanpassung in zufälligen Wäldern?

Ich benutze r und rstudio als meine Entwicklungsumgebung. Ich benutze das randomForestPaket und habe die Standardeinstellungen für alle Parameter übernommen

Abhi
quelle
4
Breiman behauptet, dass RF nicht überanstrengt. stat.berkeley.edu/~breiman/RandomForests/cc_home.htm Unter der Annahme, dass er korrekt ist, besteht möglicherweise eine gewisse Inkonsistenz zwischen Ihrem Training und dem Test-Set?
Setzen Sie Monica
RF VERMEIDET eine Überanpassung der TESTDATEN, wenn Sie den Tuning-Parameter optimieren
Brash Equilibrium
Ich finde Sampsize einen komplett übersehenen Tuning-Parameter. stackoverflow.com/questions/34997134/…
Soren Havelund Welling

Antworten:

30

kk{5,10}

Dreistes Gleichgewicht
quelle
1
Danke. Gibt es ein Tutorial, das zeigt, wie man diese Parameter optimiert?
Abhi
Sie müssen sich für Stanford Online-Kurse registrieren, was ziemlich einfach ist. Hier ist jedoch ein Video-Tutorial, um dies in R zu tun: class.stanford.edu/courses/HumanitiesScience/StatLearning/…
Brash Equilibrium
Wenn ich das richtig verstehe, verwenden wir die Kreuzvalidierung, um die Anzahl der Features zu ermitteln, die in das Zufallsgesamtstrukturmodell aufgenommen werden, im Gegensatz zu der Anzahl der Features, die das Modell bei jedem Schritt versucht. Richtig ?
Abhi
4
Ich würde gegen diese Antwort argumentieren: Zwei der ansprechenden Merkmale von RFs sind, dass es schwierig ist, sie zu überarbeiten, und dass die Standardparameter normalerweise ziemlich gut sind. Diese Antwort scheint zu implizieren, dass die RF empfindlich auf die
Standardeinstellungen
7
Empirisch habe ich es überhaupt nicht schwierig gefunden, zufällige Gesamtstrukturen, geführte zufällige Gesamtstrukturen, regulierte zufällige Gesamtstrukturen oder geführte regulierte zufällige Gesamtstrukturen zu überziehen. Bei der Kreuzvalidierung schneiden sie regelmäßig sehr gut ab, bei Verwendung mit neuen Daten aufgrund von Überanpassung jedoch schlecht. Ich glaube, das hängt mit der Art der Phänomene zusammen, die modelliert werden. Es ist kein großes Problem, einen mechanischen Prozess zu modellieren, aber mit so etwas wie einem Verhaltensmodell erhalte ich viel stabilere Ergebnisse mit einer genau festgelegten Regression.
Hack-R
33

Wie erhältst du diese 99% AUC auf deinen Trainingsdaten? Seien Sie sich bewusst, dass es einen Unterschied zwischen gibt

predict(model)

und

predict(model, newdata=train)

beim Abrufen von Vorhersagen für den Trainingsdatensatz. Die erste Option ruft die Out-of-Bag- Prognosen aus der zufälligen Gesamtstruktur ab. Dies ist im Allgemeinen das, was Sie möchten, wenn Sie vorhergesagte Werte mit den tatsächlichen Werten der Trainingsdaten vergleichen.

Die zweite behandelt Ihre Trainingsdaten wie einen neuen Datensatz und führt die Beobachtungen in jedem Baum aus. Dies führt zu einer künstlich engen Korrelation zwischen den Vorhersagen und den tatsächlichen Werten, da der RF-Algorithmus die einzelnen Bäume im Allgemeinen nicht beschneidet und sich stattdessen auf das Ensemble von Bäumen stützt, um die Überanpassung zu steuern. Tun Sie dies also nicht, wenn Sie Vorhersagen zu den Trainingsdaten erhalten möchten.

Hong Ooi
quelle
3
Ich habe vorhergesagt (Modell, Daten = Zug). Ich habe jetzt auf Vorhersagen (Modell) umgestellt und mein Auc ist auf 87% gefallen. Ist das eine gute oder eine schlechte Sache?
Abhi
2
Danke! Ich stellte fest, dass dies auch für mich das Problem war. Ich habe hier eine Frage gestellt, welche Maßnahme als "Trainingsfehler" für RF-Modelle verwendet werden soll: stats.stackexchange.com/questions/162353/…
Berk U.
Grosses Dankeschön!! Ich habe diesen Fehler auch gemacht! Zu @Abhi: Es ist eine gute Sache, denn die vorherige AUC war unsinnig hoch. Dieser ist realistischer. Versuchen Sie eine Kreuzvalidierung und messen Sie die AUC daran. Sie werden wahrscheinlich einen ähnlichen Wert sehen.
Neugierig
7

Für Entscheidungsbäume gibt es zwei Möglichkeiten, mit Überanpassung umzugehen: (a) Wachsen Sie die Bäume nicht vollständig an (b) Beschneiden

Gleiches gilt für einen Wald von Bäumen - nicht zu viel wachsen und beschneiden.

Ich verwende nicht randomForestviel, aber meines Wissens gibt es verschiedene Parameter, mit denen Sie Ihre Wälder optimieren können:

  • nodesize - Mindestgröße der Endknoten
  • maxnodes - maximale Anzahl von Endknoten
  • mtry - Anzahl der Variablen, mit denen jeder Baum erstellt wurde (danke @ user777)
Alexey Grigorev
quelle
1
Und mtrydie Anzahl der Variablen zeichnet der Algorithmus jeden Baum, die Quadratwurzel der Anzahl der Features Gesamtstandardmäßig zu bauen.
Setzen Sie Monica
Ich würde stattdessen maxnodes und lower sampsize lassen. Sowohl abnehmende Maxnodes als auch Sampsize ergeben Bäume mit geringerer Tiefe und einem robusteren Wald, sampsize jedoch auch mit geringerer Baumkorrelation, und der Wald wird wahrscheinlich konvergieren, um den kreuzvalidierten
Soren Havelund Welling
2

Möglicherweise möchten Sie Kreuzvalidierungsmethoden verwenden, z. B. die K-fache Kreuzvalidierung.

Fre
quelle
Müssen Sie die Funktionen normalisieren / skalieren?
Charles
4
@ charles Entschuldigung. Es ist in der Tat nicht erforderlich, die Features bei der Verwendung von zufälligen Gesamtstrukturen zu skalieren. Siehe: stackoverflow.com/questions/8961586/…
Fre
Ich denke, Kreuzvalidierung wäre nützlich. Dies ist ein relativ kleiner Datensatz mit geteilter Stichprobenvalidierung, der möglicherweise zu instabilen Schätzungen des Fehlers führt (obwohl ich zugegebenermaßen das Gefühl habe, dass dies hier nicht das Problem ist)
Charles,
1

Sie können Ihre Parameter mit Gridsearch einstellen

from sklearn.ensemble import RandomForestClassifier

from sklearn.grid_search import GridSearchCV

random_classifier = RandomForestClassifier()

parameters = { 'max_features':np.arange(5,10),'n_estimators':[500],'min_samples_leaf': [10,50,100,200,500]}

random_grid = GridSearchCV(random_classifier, parameters, cv = 5)
Aman Bassi
quelle
Ein versuchter Editor schlägt vor, dass das Modul GridSearchCVaufgerufen model_selectionwird und daher die zweite Codezeile sein sollte from sklearn.model_selection import GridSearchCV.
gung - Wiedereinsetzung von Monica
0

Versuchen Sie, den Parameter max_depth in Bereichen von [5, 15] abzustimmen , aber nicht darüber hinaus, da bei großen Tiefen die Gefahr einer Überanpassung groß ist.

Naveen Chelimilla
quelle