Random Forest - Comment gérer l'overfitting

41

J'ai une formation en informatique mais j'essaie de m'enseigner la science des données en résolvant des problèmes sur Internet.

Je travaille sur ce problème depuis deux semaines (environ 900 lignes et 10 fonctionnalités). J'utilisais initialement la régression logistique, mais maintenant je suis passé aux forêts aléatoires. Lorsque j'exécute mon modèle de forêt aléatoire sur mes données d'entraînement, j'obtiens des valeurs très élevées pour auc (> 99%). Cependant, lorsque j'utilise le même modèle sur les données de test, les résultats ne sont pas très bons (précision d'environ 77%). Cela me porte à croire que je corrige trop les données de formation.

Quelles sont les meilleures pratiques en matière de prévention de l'aménagement excessif dans des forêts aléatoires?

J'utilise r et rstudio comme environnement de développement. J'utilise le randomForestpackage et ai accepté les valeurs par défaut pour tous les paramètres

Abhi
la source
4
Breiman affirme que RF ne suralimente pas. stat.berkeley.edu/~breiman/RandomForests/cc_home.htm En supposant qu'il ait raison, il y a peut-être une sorte d'incohérence entre votre formation et vos tests?
Sycorax dit Rétablir Monica
RF évite les overfits aux données de test si vous optimisez le paramètre de réglage
Brash Equilibrium
Je trouve que sampsize est un paramètre de réglage complètement négligé. stackoverflow.com/questions/34997134/…
Soren Havelund Welling

Réponses:

30

Pour éviter les sur-ajustements dans les forêts aléatoires, la principale chose à faire est d’optimiser un paramètre d’ajustement qui régit le nombre d’entités choisies de manière aléatoire pour développer chaque arbre à partir des données initialisées. Pour ce faire, vous effectuez cette opération via la validation croisée de fold, où , puis choisissez le paramètre de réglage qui minimise l’erreur de prédiction de l’échantillon test. En outre, la croissance d'une forêt plus grande améliorera la précision des prévisions, bien que les rendements diminuent généralement lorsque vous atteignez plusieurs centaines d'arbres.k { 5 , 10 }kk{5,dix}

Équilibre de Brash
la source
1
Merci. Existe-t-il un tutoriel qui montre comment optimiser ces paramètres?
Abhi
Vous devrez vous inscrire aux cours en ligne de Stanford, ce qui est assez simple, mais voici un didacticiel vidéo pour le faire dans R: class.stanford.edu/courses/HumanitiesScience/StatLearning/…
Brash Equilibrium du
Si je comprends bien, nous utilisons la validation croisée pour déterminer le nombre d'entités qui entrent dans le modèle de forêt aléatoire, par opposition au nombre d'entités que le modèle essaiera à chaque étape. Correct ?
Abhi
4
Je suis contre cette réponse: deux des caractéristiques intéressantes des RF sont qu’il est difficile de les sur-adapter et que les paramètres par défaut sont généralement assez bons. Cette réponse semble impliquer que les RF sont sensibles aux valeurs par défaut, ce qui est rarement le cas
charles le
7
Empiriquement, je n’ai pas trouvé difficile de sur-équiper une forêt aléatoire, une forêt aléatoire guidée, une forêt aléatoire régularisée ou une forêt aléatoire guidée régularisée. Ils fonctionnent régulièrement très bien en validation croisée, mais mal lorsqu'ils sont utilisés avec de nouvelles données en raison d'un ajustement excessif. Je pense que cela a à voir avec le type de phénomènes modélisés. Ce n'est pas vraiment un problème lorsque vous modélisez un processus mécanique, mais avec quelque chose comme un modèle comportemental, j'obtiens des résultats beaucoup plus stables avec une régression bien spécifiée.
Hack-R
33

Comment obtenez-vous cette AUC à 99% dans vos données d'entraînement? Sachez qu'il y a une différence entre

predict(model)

et

predict(model, newdata=train)

lors de l’obtention de prévisions pour l’ensemble de données de formation. La première option obtient les prédictions hors sac de la forêt aléatoire. C’est généralement ce que vous voulez, lorsque vous comparez les valeurs prédites aux valeurs réelles des données d’entraînement.

La seconde traite vos données d’entraînement comme s’il s’agissait d’un nouvel ensemble de données et analyse les observations dans chaque arbre. Cela aboutira à une corrélation artificiellement étroite entre les prédictions et les valeurs réelles, car l'algorithme RF ne règle généralement pas les arbres individuels, mais repose sur l'ensemble des arbres pour contrôler les surajustements. Donc, ne le faites pas si vous voulez obtenir des prévisions sur les données d'entraînement.

Hong Ooi
la source
3
J'utilisais Pred (modèle, données = train). Je suis maintenant passé à prédire (modèle) et mon auc est tombé à 87%. Est-ce une bonne chose ou une mauvaise chose?
Abhi
2
Merci! J'ai trouvé que c'était aussi le problème pour moi. J'ai posté une question de suivi sur la mesure à utiliser comme "erreur de formation" pour les modèles RF ici: stats.stackexchange.com/questions/162353/…
Berk U.
Super merci!! Je faisais cette erreur aussi! Pour @Abhi: c'est une bonne chose, car la précédente AUC était absurde. Celui-ci est plus réaliste. Essayez la validation croisée et mesurez l'AUC sur cela et vous verrez probablement une valeur similaire.
Curieux
7

Pour les arbres de décision, il existe deux manières de traiter les surajustements: (a) ne pas les développer entièrement (b) élaguer

La même chose s'applique à une forêt d'arbres - ne les cultivez pas trop et ne les taillez pas.

Je n'en utilise pas randomForestbeaucoup, mais à ma connaissance, il existe plusieurs paramètres que vous pouvez utiliser pour ajuster vos forêts:

  • nodesize - taille minimale des nœuds terminaux
  • maxnodes - nombre maximum de nœuds terminaux
  • mtry - nombre de variables utilisées pour construire chaque arbre (merci @ user777)
Alexey Grigorev
la source
1
Et mtry, le nombre de variables dessinées par l'algorithme pour construire chaque arbre, par défaut la racine carrée du nombre total d'entités.
Sycorax dit Rétablir Monica
Je laisserais maxnodes et low sampsize à la place. La réduction de maxnodes et la taille de sampsize donnent aux arbres moins profonds et une forêt plus robuste, mais aussi une corrélation plus faible entre les arbres, et la forêt convergera probablement pour réduire l’erreur de prédiction validée par des croisements, voir stackoverflow.com/questions/34997134/…
Soren Havelund Welling
2

Vous souhaiterez peut-être utiliser des méthodes de validation croisée, telles que la validation croisée K fold.

Fre
la source
vous devez normaliser / redimensionner les fonctionnalités?
Charles
4
@charles mes excuses. Il n'est en effet pas nécessaire de redimensionner les fonctionnalités lors de l'utilisation de forêts aléatoires. Voir: stackoverflow.com/questions/8961586/…
Fre
Je pense que la validation croisée serait utile. Il s'agit d'un ensemble de données relativement petit avec une validation sur échantillon fractionné, ce qui peut générer des estimations d'erreur instables (même si, de toute évidence, j'ai l'impression que ce n'est pas la question qui se pose ici)
charles
1

vous pouvez ajuster vos paramètres en utilisant gridsearch

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
la source
Une tentative d'éditeur suggère que le module GridSearchCVest appelé est appelé model_selection, et donc que la deuxième ligne de code devrait l'être from sklearn.model_selection import GridSearchCV.
gung - Rétablir Monica
0

Essayez d’ajuster le paramètre max_depth dans les plages de [5, 15] mais pas plus, car si vous prenez une grande profondeur, il y a de fortes chances pour que vous sur-ajustiez.

Naveen Chelimilla
la source