Il existe de nombreux articles de blog, vidéos YouTube, etc. sur les idées d' ensachage ou de renforcement des arbres. Ma compréhension générale est que le pseudo-code pour chacun est:
Ensachage:
- Prélever N échantillons aléatoires de x% des échantillons et y% des fonctionnalités
- Ajustez votre modèle (par exemple, arbre de décision) sur chacun des N
- Prédire avec chaque N
- Moyenne des prédictions pour obtenir la prédiction finale
Boosting:
- Adapter votre modèle (par exemple, arbre de décision) à vos données
- Obtenez les résidus
- Ajustez votre modèle aux résidus
- Passez à 2 pour N rounds de boost
- La prédiction finale est une somme pondérée des prédicteurs séquentiels.
Je vais apporter des clarifications à ma compréhension ci-dessus, mais ma question est la suivante:
Les deux XGBoost et LightGBM ont des paramètres qui permettent l'ensachage. L'application n'est pas Bagging OR Boosting (ce dont parlent tous les articles de blog), mais Bagging AND Boosting. Quel est le pseudo-code pour savoir où et quand l'ensachage et le boosting combinés ont lieu?
Je m'attendais à ce qu'il s'agisse de "Boosted Boosted Trees", mais il semble que ce soit "Boosted Bagged Trees". La différence semble substantielle.
Arbres boostés en sac:
- Prélever N échantillons aléatoires de x% des échantillons et y% des fonctionnalités
- Ajuster les arbres boostés sur chacun des N échantillons
- Prédire avec chaque N
- Moyenne des prédictions pour obtenir la prédiction finale
Cela semble être la meilleure façon de procéder. Après tout, le risque de suralimentation est le sur-ajustement et le principal avantage de l'ensachage est de réduire le sur-ajustement; ensacher un tas de modèles boostés semble être une excellente idée.
Cependant, en parcourant, par exemple le scikit-learn
gradient_boosting.py (qui fait un échantillonnage d'ensachage, mais pas la sélection de fonctionnalités aléatoires), et en bricolant quelques petits pépites à travers les publications sur LightGBM et XGBoost, il semble que XGBoost et LightGBM fonctionnent comme suit:
Arbres en sac boostés:
- Adapter un arbre de décision à vos données
- Pour les tours de boost i in N:
- Obtenez les résidus
- si je modifie bag_frequency == 0 (c.-à-d., sac tous les 5 tours):
- Prélevez un seul échantillon aléatoire de x% des échantillons et y% des caractéristiques; utiliser cet échantillon aléatoire à l'avenir
- adapter l'arbre aux résidus
- La prédiction finale est une somme pondérée des prédicteurs séquentiels.
Veuillez corriger ma compréhension ici et remplir les détails. Boosted Bagged Tree (avec seulement 1 arbre aléatoire par bag_frequency) ne semble pas aussi puissant que Bagged Boosted Tree.