L'amplification des arbres à gradient comme proposé par Friedman utilise des arbres de décision avec J
des nœuds terminaux (= feuilles) comme apprenants de base. Il existe un certain nombre de façons de faire pousser un arbre avec exactement des J
nœuds, par exemple, on peut faire pousser l'arbre en premier lieu en profondeur ou en premier en largeur, ...
Existe-t-il un moyen établi de faire pousser des arbres avec J
des nœuds exactement terminaux pour augmenter le gradient d'arbres?
J'ai examiné la procédure d'arborescence du gbm
package de R et il semble qu'il développe l'arbre en profondeur et utilise une heuristique basée sur l'amélioration des erreurs pour choisir d'étendre le nœud enfant gauche ou droit - est-ce correct?
gbm
a un paramètren.minobsinnode
qui contrôle le nombre minimum d'objets par nœud. Bien sûr, alors le nombre de nœuds est inférieur ou égal à NumberOfPoints / n.minobsinnodeRéponses:
La solution dans les R
gbm
n'est pas typique.D'autres paquets, comme
scikit-learn
ouLightGBM
utilisent ce qu'on appelle (dans scikit-learn)BestFirstTreeBuilder
, lorsque le nombre de feuilles est restreint. Il prend en charge une file d'attente prioritaire de toutes les feuilles et à chaque itération divise la feuille qui apporte la meilleure diminution d'impureté. Ce n'est donc ni la profondeur d'abord ni la largeur d'abord, mais un troisième algorithme, basé sur des calculs dans les feuilles.Dans un certain sens, cette approche est plus optimale que de diviser aveuglément toutes les feuilles à son tour. Cependant, c'est toujours une heuristique gourmande, car le choix de diviser le ième nœud dépend maintenant uniquement de la première division de et non des éventuelles divisions successives qui peuvent diminuer l'impureté beaucoup plus que la division actuelle.i i
la source