Mindestanzahl von Bäumen für den Random Forest-Klassifikator

8

Ich suche nach einer theoretischen oder experimentellen Schätzung der Untergrenze für die Anzahl der Bäume in einem Random Forest-Klassifikator.

Normalerweise teste ich verschiedene Kombinationen und wähle die aus, die (mithilfe der Kreuzvalidierung) das median beste Ergebnis liefert.

Ich denke jedoch, dass es bei Beobachtungen und Merkmalen eine Untergrenze für die Anzahl der zu verwendenden Bäume geben kann, um den Varianzbeitrag zum Fehler zu verringern. Gibt es einen Test oder eine Referenz, die ich überprüfen kann, um meinen Klassifikator richtig einzustellen?mn

gc5
quelle
3
Ich bezweifle das. Aber ein Vorschlag: Der Bereich des maschinellen Lernens, in dem die Leistung des maschinellen Lernens untersucht wird, wird als empirische Risikominimierung bezeichnet . Sie können versuchen, diese Schlüsselwörter zu Ihren Suchanfragen hinzuzufügen.
Ricardo Cruz

Antworten:

7

Dies ist nicht unbedingt eine Antwort auf Ihre Frage. Nur allgemeine Gedanken zur Kreuzvalidierung der Anzahl von Entscheidungsbäumen in einem zufälligen Wald.

Ich sehe viele Leute in Kaggle und Stackexchange, die die Anzahl der Bäume in einem zufälligen Wald kreuzvalidieren. Ich habe auch ein paar Kollegen gefragt, die mir sagen, dass es wichtig ist, sie gegenseitig zu validieren, um eine Überanpassung zu vermeiden.

Das ergab für mich nie einen Sinn. Da jeder Entscheidungsbaum unabhängig trainiert wird, sollte das Hinzufügen weiterer Entscheidungsbäume Ihr Ensemble immer robuster machen.

(Dies unterscheidet sich von Gradienten-Boosting-Bäumen, die ein besonderer Fall von Ada-Boosting sind. Daher besteht die Möglichkeit einer Überanpassung, da jeder Entscheidungsbaum darauf trainiert ist, Residuen stärker zu gewichten.)

Ich habe ein einfaches Experiment gemacht:

from sklearn.datasets import load_digits
from sklearn.ensemble import RandomForestClassifier
from sklearn.grid_search import GridSearchCV
import numpy as np
import matplotlib.pyplot as plt
plt.ioff()

df = load_digits()
X = df['data']
y = df['target']

cv = GridSearchCV(
    RandomForestClassifier(max_depth=4),
    {'n_estimators': np.linspace(10, 1000, 20, dtype=int)},
    'accuracy',
    n_jobs=-1,
    refit=False,
    cv=50,
    verbose=1)
cv.fit(X, y)
scores = np.asarray([s[1] for s in cv.grid_scores_])
trees = np.asarray([s[0]['n_estimators'] for s in cv.grid_scores_])
o = np.argsort(trees)
scores = scores[o]
trees = trees[o]
plt.clf()
plt.plot(trees, scores)
plt.xlabel('n_estimators')
plt.ylabel('accuracy')
plt.savefig('trees.png')
plt.show()

Performance

Ich sage nicht, dass Sie diesen Irrtum begehen, wenn Sie glauben, dass mehr Bäume zu einer Überanpassung führen können. Sie sind es eindeutig nicht, da Sie um eine Untergrenze gebeten haben. Dies ist nur etwas, das mich schon eine Weile nervt, und ich denke, es ist wichtig, daran zu denken.

(Nachtrag: Elemente des statistischen Lernens erörtert dies auf Seite 596 und stimmt mir darin zu. «Es ist sicher richtig, dass eine Erhöhung von B [B = Anzahl der Bäume] nicht zu einer Überanpassung der zufälligen Waldsequenz führt». Der Autor macht die Beobachtung, dass «diese Grenze die Daten überanpassen kann». Mit anderen Worten, da andere Hyperparameter zu einer Überanpassung führen können, rettet Sie das Erstellen eines robusten Modells nicht vor einer Überanpassung. Sie müssen bei der Kreuzvalidierung Ihrer anderen Hyperparameter aufpassen. )

Um Ihre Frage zu beantworten, ist das Hinzufügen von Entscheidungsbäumen für Ihr Ensemble immer von Vorteil. Es wird es immer robuster machen. Es ist jedoch zweifelhaft, ob die geringfügige Verringerung der Varianz um 0,00000001 die Rechenzeit wert ist.

Wie ich verstehe, ist Ihre Frage daher, ob Sie die Anzahl der Entscheidungsbäume irgendwie berechnen oder schätzen können, um die Fehlervarianz auf unter einen bestimmten Schwellenwert zu reduzieren.

Ich bezweifle es sehr. Wir haben keine klaren Antworten auf viele allgemeine Fragen im Data Mining, geschweige denn auf solche spezifischen Fragen. Wie Leo Breiman (der Autor von Zufallswäldern) schrieb, gibt es bei der statistischen Modellierung zwei Kulturen , und Zufallswälder sind die Art von Modell, von denen er sagt, dass sie nur wenige Annahmen haben, aber auch sehr datenspezifisch sind. Deshalb, sagt er, können wir nicht auf Hypothesentests zurückgreifen, sondern müssen uns für eine Brute-Force-Kreuzvalidierung entscheiden.

Ricardo Cruz
quelle
Mh, ich dachte, dass eine Erhöhung der Anzahl der Bäume zu einer Erhöhung der Bias-Komponente des Fehlers führen würde (was durch eine abnehmende Varianz des Modells irgendwie ausgeglichen wird).
GC5
1
Ich habe immer gedacht, dass das Hinzufügen von Bäumen niemals schaden könnte, aber auf Seite 596 von The Elements of Statistical Learning behaupten sie, dass ein zu reicher Wald zusätzliche Variabilität mit sich bringen kann. Ich denke, Ihre Antwort ist immer noch richtig, aber mit einem winzigen Salzkorn: )
TBSRounder
1
@ TBRounder Danke für den Link. Der Autor diskutiert zu viele Dinge in einem so kurzen Text, daher ist es schwierig, ihn zu destillieren, besonders verwirrend, weil er gleichzeitig über Baumtiefe und Baumnummer spricht. In Bezug auf B (= # Bäume) sagt er jedoch, dass mehr Bäume das resultierende Modell näher an den durchschnittlichen Baum bringen, und natürlich kann der durchschnittliche Baum voreingenommen sein, so dass Sie möglicherweise ein voreingenommenes Modell erhalten. Ich habe nie etwas anderes behauptet. Ich habe nur gesagt, dass B an sich die Voreingenommenheit nicht erhöht. Es macht Ihr Modell nur robuster (= reduziert die Varianz).
Ricardo Cruz
Ah ja, es war ein wenig verwirrend, danke für die Klarstellung. Aus irgendeinem Grund dachte ich, der Autor spreche von B, nicht von Baumtiefe.
TBSRounder