XGBoost (eXtreme Gradient Boosting) est une bibliothèque logicielle open source qui fournit un framework de boosting par descente de gradient régularisé pour C++, Java, Python, R, Julia, Perl et Scala. Elle fonctionne sur Linux, Microsoft Windows et macOS. Le projet vise à fournir une « bibliothèque de boosting par descente de gradient scalable, portable et distribuée (GBM, GBRT, GBDT) », fonctionnant sur une machine unique ainsi que sur des frameworks de traitement distribué tels qu'Apache Hadoop, Apache Spark, Apache Flink et Dask. XGBoost a gagné une popularité significative au milieu des années 2010 en tant qu'algorithme de choix pour de nombreuses équipes gagnantes dans les compétitions d'apprentissage automatique, notamment sur des plateformes comme Kaggle.
La bibliothèque repose sur le principe du boosting par descente de gradient, une technique d'ensemble qui combine plusieurs modèles prédictifs faibles, généralement des arbres de décision, en un modèle unique et fort. XGBoost se distingue par des optimisations en termes de vitesse, d'évolutivité et de régularisation, ce qui en fait un outil polyvalent pour les tâches de classification, de régression et de classement dans divers domaines, de la finance à la santé.
Historique
XGBoost est né d'un projet de recherche mené par Tianqi Chen, développé dans le cadre du groupe Distributed (Deep) Machine Learning Community (DMLC) à l'Université de Toronto (bien que les travaux initiaux aient été réalisés à l'Université de Washington). Il a commencé comme une application en ligne de commande configurée à l'aide d'un fichier de configuration au format libsvm. Le projet a gagné en reconnaissance dans les cercles de compétitions d'apprentissage automatique après son utilisation dans la solution gagnante du Higgs Machine Learning Challenge, une compétition organisée par le CERN et d'autres institutions pour classer des événements de particules. Ce succès a conduit au développement rapide de paquets pour Python et R, suivis d'implémentations pour Java, Scala, Julia, Perl et d'autres langages, élargissant ainsi sa base d'utilisateurs et contribuant à sa popularité dans la communauté Kaggle.
XGBoost a rapidement été intégré à d'autres outils pour faciliter son adoption. Il est devenu disponible avec scikit-learn pour les utilisateurs de Python et avec le paquet caret pour les utilisateurs de R. L'intégration avec des frameworks de flux de données comme Apache Spark, Apache Hadoop et Apache Flink a été réalisée grâce aux interfaces abstraites Rabit et XGBoost4J. De plus, XGBoost est disponible sur OpenCL pour les FPGA. Une implémentation efficace et scalable a été publiée par Tianqi Chen et Carlos Guestrin, détaillant les optimisations algorithmiques et système.
Caractéristiques
XGBoost comprend plusieurs caractéristiques notables qui le différencient des autres algorithmes de boosting par descente de gradient :
- Pénalisation des arbres, qui applique une régularisation pour réduire le sur-apprentissage.
- Réduction proportionnelle des nœuds feuilles, qui ajuste la contribution de chaque arbre.
- Boosting de Newton, qui utilise les dérivées du second ordre pour l'optimisation.
- Paramètre de randomisation supplémentaire pour réduire la corrélation entre les arbres.
- Implémentation sur systèmes uniques et distribués, ainsi que calcul hors mémoire pour les grands ensembles de données.
- Sélection automatique des caractéristiques pendant l'entraînement.
- Échantillonnage par quantiles pondérés, justifié théoriquement, pour un calcul efficace sur de grandes données.
- Structure d'arbre parallèle avec prise en compte de la parcimonie, gérant efficacement les valeurs manquantes.
- Structure de blocs cacheable pour l'entraînement des arbres de décision, améliorant les schémas d'accès mémoire.
Ces caractéristiques contribuent à la réputation de XGBoost pour ses performances élevées et sa robustesse dans divers contextes.
L'algorithme
XGBoost fonctionne comme une méthode de Newton-Raphson dans l'espace des fonctions, contrairement au boosting par descente de gradient standard qui opère comme une descente de gradient dans cet espace. Une approximation de Taylor du second ordre est utilisée pour la fonction de perte, établissant un lien avec la méthode de Newton-Raphson. Cette approche permet à l'algorithme de capturer les informations de courbure, ce qui conduit à une convergence plus rapide et souvent à une meilleure précision.
L'algorithme XGBoost générique non régularisé ajoute itérativement des arbres pour minimiser une fonction de perte. À chaque étape, l'algorithme calcule le gradient et le Hessien de la perte par rapport aux prédictions actuelles, puis ajuste un arbre à ces valeurs. La structure de l'arbre est apprise en évaluant les candidats de division qui maximisent la réduction de la perte, avec des termes de régularisation contrôlant la complexité.
La parcimonie est gérée via un mécanisme de direction par défaut, où les valeurs manquantes sont routées vers la branche optimale en fonction des données d'entraînement. Le boosting d'arbres parallèles est implémenté à l'aide d'une structure de blocs qui permet un accès efficace aux colonnes, prenant en charge le calcul hors mémoire et l'entraînement distribué.
Paramètres
XGBoost expose de nombreux paramètres qui influencent son comportement et ses performances. Les paramètres clés incluent :
- Taux d'apprentissage (également appelé « pas » ou « retrait ») : un nombre entre 0 et 1, par défaut 0,3, déterminant l'ampleur de l'apprentissage à chaque itération. Des valeurs plus faibles nécessitent plus d'arbres mais peuvent améliorer la généralisation.
- n_estimators : définit le nombre d'arbres à construire dans l'ensemble. Un nombre plus élevé augmente la complexité du modèle mais peut conduire à un sur-apprentissage s'il est trop grand.
- Gamma (également appelé multiplicateur de Lagrange ou paramètre de réduction minimale de perte) : contrôle la réduction minimale de perte requise pour effectuer une division supplémentaire sur un nœud feuille. La valeur par défaut est 0.
- max_depth : représente la profondeur maximale de chaque arbre pendant l'entraînement, avec une valeur par défaut de 6. Des arbres plus profonds capturent des motifs plus complexes mais risquent le sur-apprentissage.
D'autres paramètres incluent subsample, colsample_bytree, reg_alpha et reg_lambda, qui offrent un contrôle supplémentaire sur l'échantillonnage et la régularisation.
Applications et impact
XGBoost a été largement adopté dans l'industrie et le monde académique. En finance, il est utilisé pour le scoring de crédit, la détection de fraude et la modélisation des risques. Dans le secteur de la santé, il soutient la prédiction de maladies et l'analyse des résultats patients. Dans le commerce électronique, il alimente les systèmes de recommandation et la prédiction de désabonnement des clients. Ses performances dans les compétitions, notamment sur Kaggle, en ont fait une référence pour les problèmes de données tabulaires.
L'intégration de la bibliothèque avec des frameworks d'apprentissage automatique et des plateformes de calcul distribué a permis son utilisation dans des applications à grande échelle. Elle a été incorporée dans des plateformes comme Amazon Web Services et Google Cloud pour des services d'apprentissage automatique gérés.
Récompenses et reconnaissance
XGBoost a reçu plusieurs distinctions, notamment le prix John Chambers en 2016, le prix « High Energy Physics meets Machine Learning » (HEP meets ML) en 2016, et un « Test of Time Award » lors de la conférence KDD en 2026. Ces reconnaissances soulignent ses contributions tant sur les aspects appliqués que théoriques de l'apprentissage automatique.
Voir aussi
- Comparaison des logiciels d'apprentissage automatique
- TabPFN
- LightGBM
- CatBoost
Références
- Chen, T., & Guestrin, C. (2016). XGBoost : A Scalable Tree Boosting System. Actes de la 22e conférence internationale ACM SIGKDD sur la découverte de connaissances et l'exploration de données.
- Documentation du projet et code source disponibles sur les dépôts officiels.