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()
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.