Gradient Boosting Tree: «plus il y a de variables, mieux c'est»?

10

D'après le tutoriel du XGBoost, je pense que lorsque chaque arbre grandit, toutes les variables sont analysées pour être sélectionnées pour fractionner les nœuds, et celle avec la répartition de gain maximale sera choisie. Donc, ma question est que si j'ajoutais des variables de bruit dans l'ensemble de données, ces variables de bruit influenceraient-elles la sélection des variables (pour chaque arbre qui grandit)? Ma logique est que parce que ces variables de bruit ne donnent PAS du tout de gain maximal, elles ne seraient donc jamais sélectionnées et n'influenceraient donc pas la croissance de l'arbre.

Si la réponse est oui, est-il vrai que "plus il y a de variables, mieux c'est pour XGBoost"? Ne considérons pas le temps de formation.

De plus, si la réponse est oui, alors est-il vrai que "nous n'avons pas besoin de filtrer les variables non importantes du modèle".

Je vous remercie!

WCMC
la source

Réponses:

11

Ma logique est que parce que ces variables de bruit ne donnent PAS du tout de gain maximum, alors elles ne seraient jamais sélectionnées et n'influencent donc pas la croissance de l'arbre.

Ceci n'est parfaitement correct que pour des ensembles de données très volumineux, presque infinis, où le nombre d'échantillons dans votre ensemble d'entraînement donne une bonne couverture de toutes les variations. En pratique, avec suffisamment de dimensions, vous vous retrouvez avec beaucoup de bruit d'échantillonnage, car votre couverture d'exemples possibles est plus faible plus vos données ont de dimensions.

Le bruit sur les variables faibles qui finit par se corréler par hasard avec la variable cible peut limiter l'efficacité des algorithmes de renforcement, et cela peut plus facilement se produire sur des divisions plus profondes dans l'arbre de décision, où les données évaluées ont déjà été regroupées dans un petit sous-ensemble.

Plus vous ajoutez de variables, plus il est probable que vous obtiendrez des variables faiblement corrélées qui semblent justes bien à l'algorithme de sélection fractionnée pour une combinaison spécifique, ce qui crée ensuite des arbres qui apprennent ce bruit au lieu du signal souhaité, et finalement généraliser mal.

En pratique, j'ai trouvé XGBoost assez robuste au bruit à petite échelle. Cependant, j'ai également constaté qu'il sélectionne parfois des variables techniques de mauvaise qualité, de préférence à des données mieux corrélées, pour des raisons similaires. Ce n'est donc pas un algorithme où "plus il y a de variables, mieux c'est pour XGBoost" et vous devez vous préoccuper des fonctionnalités possibles de faible qualité.

Neil Slater
la source
très agréable. Merci! Pensez-vous donc que la sélection des fonctionnalités avant d'installer XGBoost est nécessaire en fonction de votre expérience?
WCMC
@Frank: Peut-être. Vous pouvez également commencer par un ensemble complet de fonctionnalités et utiliser le rapport d'importance variable xgboost pour vous aider. En général cependant, XGBoost ne vous sauve pas complètement des préoccupations habituelles concernant la sélection et l'ingénierie des fonctionnalités.
Neil Slater
Bonjour @Neil, veuillez consulter datascience.stackexchange.com/questions/17288/… chaque fois que vous en avez l'occasion. Je vous remercie.
WCMC
@Frank: Je l'ai déjà fait hier et j'ai laissé une question pour des éclaircissements car les chiffres semblaient un peu décalés.
Neil Slater
Bonjour @Neil, puisque l'affiche précédente n'a pas répondu à votre question, je la republie ici avec mon propre projet. J'y ai également fourni un ensemble de données et un script R, ce qui, je l'espère, serait plus pratique pour que d'autres comprennent le problème. J'apprécie si vous aimeriez fournir de l'aide.
WCMC