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 randomForest
package et ai accepté les valeurs par défaut pour tous les paramètres
Réponses:
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 }k k ∈ { 5 , 10 }
la source
Comment obtenez-vous cette AUC à 99% dans vos données d'entraînement? Sachez qu'il y a une différence entre
et
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.
la source
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
randomForest
beaucoup, mais à ma connaissance, il existe plusieurs paramètres que vous pouvez utiliser pour ajuster vos forêts:nodesize
- taille minimale des nœuds terminauxmaxnodes
- nombre maximum de nœuds terminauxmtry
- nombre de variables utilisées pour construire chaque arbre (merci @ user777)la source
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.Vous souhaiterez peut-être utiliser des méthodes de validation croisée, telles que la validation croisée K fold.
la source
vous pouvez ajuster vos paramètres en utilisant gridsearch
la source
GridSearchCV
est appelé est appelémodel_selection
, et donc que la deuxième ligne de code devrait l'êtrefrom sklearn.model_selection import GridSearchCV
.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.
la source