Nombre minimum d'arbres pour le classificateur Random Forest

8

Je recherche une estimation théorique ou expérimentale de la borne inférieure du nombre d'arbres dans un classificateur de forêt aléatoire.

Je teste généralement différentes combinaisons et sélectionne celle qui (en utilisant la validation croisée) fournit le meilleur résultat médian.

Cependant, je pense qu'il peut y avoir une limite inférieure sur le nombre d'arbres à utiliser, étant donné observations et caractéristiques, pour réduire la contribution de la variance à l'erreur. Existe-t-il un test ou une référence que je peux vérifier pour régler correctement mon classificateur?mn

gc5
la source
3
J'en doute. Mais une suggestion: le domaine de l'apprentissage automatique qui étudie les performances dans l'apprentissage automatique est appelé minimisation empirique des risques . Vous pouvez essayer d'ajouter ces mots clés à vos recherches.
Ricardo Cruz

Réponses:

7

Ce n'est pas nécessairement une réponse à votre question. Quelques réflexions générales sur la validation croisée du nombre d'arbres de décision dans une forêt aléatoire.

Je vois beaucoup de gens dans kaggle et stackexchange effectuer une validation croisée du nombre d'arbres dans une forêt aléatoire. J'ai également demandé à quelques collègues et ils me disent qu'il est important de les valider entre eux pour éviter le surapprentissage.

Cela n'a jamais eu de sens pour moi. Étant donné que chaque arbre de décision est formé indépendamment, l'ajout de plusieurs arbres de décision devrait simplement rendre votre ensemble de plus en plus robuste.

(Ceci est différent des arbres de boosting de gradient, qui sont un cas particulier de boosting ada, et donc il y a un potentiel de sur-ajustement puisque chaque arbre de décision est formé pour pondérer les résidus plus lourdement.)

J'ai fait une expérience simple:

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

Je ne dis pas que vous commettez cette erreur de penser que plus d'arbres peuvent provoquer un sur-ajustement. Ce n'est clairement pas le cas puisque vous avez demandé une limite inférieure. C'est juste quelque chose qui me dérange depuis un certain temps, et je pense qu'il est important de garder à l'esprit.

(Addendum: Elements of Statistical Learning en discute à la page 596, et est d'accord avec moi à ce sujet. «Il est certainement vrai que l'augmentation de B [B = nombre d'arbres] ne fait pas sursauter la séquence aléatoire de la forêt». L'auteur fait l'observation que «cette limite peut surajuster les données». En d'autres termes, puisque d' autres hyperparamètres peuvent conduire à un sur-ajustement, la création d'un modèle robuste ne vous sauve pas de sur-ajustement. Vous devez faire attention lors de la validation croisée de vos autres hyperparamètres. )

Pour répondre à votre question, l'ajout d'arbres de décision sera toujours bénéfique pour votre ensemble. Cela le rendra toujours plus robuste. Mais, bien sûr, il est douteux que la réduction marginale de 0,00000001 de la variance vaille le temps de calcul.

Par conséquent, si je comprends bien, votre question est de savoir si vous pouvez en quelque sorte calculer ou estimer la quantité d'arbres de décision pour réduire la variance d'erreur en dessous d'un certain seuil.

J'en doute beaucoup. Nous n'avons pas de réponses claires à de nombreuses questions générales dans l'exploration de données, encore moins à des questions spécifiques comme celle-ci. Comme l'a écrit Leo Breiman (l'auteur des forêts aléatoires), il existe deux cultures dans la modélisation statistique , et les forêts aléatoires est le type de modèle qui, selon lui, a peu d'hypothèses, mais est également très spécifique aux données. C'est pourquoi, dit-il, nous ne pouvons pas recourir à des tests d'hypothèse, nous devons aller avec la validation croisée par force brute.

Ricardo Cruz
la source
Mh, je pensais que l'augmentation du nombre d'arbres entraînerait une augmentation de la composante de biais de l'erreur (qui est en quelque sorte contrebalancée par une variance décroissante du modèle).
gc5
1
J'ai toujours pensé que l'ajout d'arbres ne pourrait jamais faire de mal, mais dans The Elements of Statistical Learning page 596, ils affirment que trop riche d'une forêt peut introduire une variabilité supplémentaire, donc je pense que votre réponse est toujours correcte, mais avec un petit grain de sel: )
TBSRounder
1
@TBSRounder Merci pour le lien. L'auteur discute de trop de choses dans un si court morceau de texte, il est donc difficile de le distiller, surtout déroutant car il parle de la profondeur et du nombre d'arbres en même temps. Mais, en ce qui concerne B (= # arbres), il dit que plus d'arbres rapprochent le modèle résultant de l'arbre moyen et, bien sûr, l'arbre moyen peut être biaisé, vous pouvez donc vous retrouver avec un modèle biaisé. Je n'ai jamais prétendu le contraire. Je viens de dire que B, en soi, n'augmente pas le biais. Cela rend simplement votre modèle plus robuste (= réduit la variance).
Ricardo Cruz
Ah oui, c'était un peu déroutant, merci pour la clarification. Pour une raison quelconque, je pensais que l'auteur parlait de B, pas de profondeur d'arbre.
TBSRounder