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 randomForest
Paket und habe die Standardeinstellungen für alle Parameter übernommen
Antworten:
quelle
Wie erhältst du diese 99% AUC auf deinen Trainingsdaten? Seien Sie sich bewusst, dass es einen Unterschied zwischen gibt
und
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.
quelle
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
randomForest
viel, aber meines Wissens gibt es verschiedene Parameter, mit denen Sie Ihre Wälder optimieren können:nodesize
- Mindestgröße der Endknotenmaxnodes
- maximale Anzahl von Endknotenmtry
- Anzahl der Variablen, mit denen jeder Baum erstellt wurde (danke @ user777)quelle
mtry
die Anzahl der Variablen zeichnet der Algorithmus jeden Baum, die Quadratwurzel der Anzahl der Features Gesamtstandardmäßig zu bauen.Möglicherweise möchten Sie Kreuzvalidierungsmethoden verwenden, z. B. die K-fache Kreuzvalidierung.
quelle
Sie können Ihre Parameter mit Gridsearch einstellen
quelle
GridSearchCV
aufgerufenmodel_selection
wird und daher die zweite Codezeile sein solltefrom sklearn.model_selection import GridSearchCV
.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.
quelle