gradient boosting, xgboost

Algorithmes de gradient boosting et introduction à XGBoost

Si vous avez déjà participé à des compétitions Kaggle, vous avez sûrement déjà entendu parler de XGBoost (eXtreme Gradient Boosting) qui est parmi les algorithmes de Gradient Boosting les plus connus et les plus utilisés dans le monde. Mais est-ce que vous vous êtes déjà demandé qu’est-ce qu’il se cache derrière ses algorithmes qu’on utilise souvent comme des boîtes noires ? Dans la suite, je vais essayer de lever le capot et de vous expliquer comment tout cela fonctionne !

L’intuition derrière le gradient boosting

Les algorithmes de Gradient Boosting s’appuient sur une idée fondamentale : tenir compte des erreurs du modèle pour améliorer les performances en formant un nouveau modèle qui réussisse à prédire les erreurs faites par le modèle original.

Grâce à cette idée, pour tout modèle prédictif, nous pouvons améliorer sa précision en formant un nouveau prédicteur pour prédire ses erreurs actuelles. Ensuite, on forme un nouveau modèle « amélioré » qui va en quelque sorte être une agrégation des deux modèles initiaux.

Pour un algorithme de Gradient Boosting comme XGBoost, ce processus est répété un nombre arbitraire de fois pour améliorer continuellement la précision du modèle. Ce processus répété constitue l’essence même du Gradient Boosting puisqu’on se base sur le principe que l’erreur va continuellement converger vers 0 au fur et à mesure qu’on répète le processus.

Quel est l’intérêt des Weak Learners du coup ?

Lors de la formation d’un nouveau modèle prédicteur d’erreurs pour prédire les erreurs actuelles d’un modèle, nous régularisons sa complexité pour éviter de tomber dans de l’overfitting. Ce modèle régularisé aura des « erreurs » lorsqu’il prédit les « erreurs » du modèle original. Nous réduisons notre confiance envers un seul prédicteur d’erreur en appliquant un petit poids η à sa sortie.

Algorithmes de gradient boosting et introduction à XGBoost

Pourquoi on parle de Gradient alors ?

Il s’avère que l’erreur qu’on essaye de corriger avec les Weak Learners est le gradient de la fonction de coût par rapport à la prédiction du modèle.

Mathématiquement, la dérivée de la fonction de coût nous donne la direction dans laquelle les prédictions peuvent être ajustées pour maximiser la perte. Dans le Gradient Boosting, nous ajustons nos prédictions dans la direction opposée c’est-à-dire vers le gradient négatif afin de pouvoir minimiser le coût et donc améliorer la performance.

Intuitivement, l’idée derrière le Gradient Boosting est que nous déplaçons les prédictions de notre modèle par petits pas vers des directions qui améliorent la performance globale de notre modèle.

Mais du coup c’est quoi au juste XGBoost ?

XGBoost est une variante des méthodes de Gradient Boosting qui utilise des arbres de décisions dit Gradient Boosting Tree comme prédicteur d’erreur. Il commence avec un prédicteur simple qui prédit un nombre arbitraire en générale 0.5 quelque soit l’entrée. Inutile de vous dire que ce prédicteur commet beaucoup d’erreurs. Le Gradient Boosting est ensuite appliquée jusqu’à ce que l’erreur soit ramenée à un minimum.

Algorithmes de gradient boosting et introduction à XGBoost

La dénomination eXtreme vient du fait que le XGBoost est une combinaison parfaite de techniques d’optimisation logicielle et matérielle permettant d’obtenir des résultats supérieurs en utilisant moins de ressources informatiques et en un minimum de temps.

Algorithmes de gradient boosting et introduction à XGBoost

Depuis d’autres algorithmes de Gradient Boosting ont vu le jour comme LightGBM développé par Microsoft ou encore CatBoost développé par Yandex mais qui sait quel sera le prochain roi du Gradient Boosting…

Algorithmes de gradient boosting et introduction à XGBoost

Comment implémenter XGBoost avec Python

En Python il existe toujours une super libraire pour faire ce que vous rechercher, dans notre cas c’est xgboost ! Mais comme pour tout bon modèle il faut chercher les bons hyperparamètres pour obtenir le meilleur résultat possible. Dans le code qui suit on va utiliser la fonction GridSearchCV de scikit-learn pour trouver les bons hyperparamètres.

Grid Search Cross Valildation étant un algorithme de recherche d’hyperparamètres qui effectue une recherche exhaustive sur une grille d’hyperparamètres spécifiée. Il teste toutes les combinaisons possibles des hyperparamètres spécifiés pour déterminer les meilleures valeurs pour ce faire il utilise une validation croisée pour évaluer les performances de chaque combinaison d’hyperparamètres.

from xgboost import XGBClassifier
from sklearn.model_selection import GridSearchCV

# Paramètres à tester pour le réglage des hyperparamètres
param_grid = {
    'learning_rate': [0.01, 0.1, 1],
    'max_depth': [100, 200, 300],
    'min_child_weight': [1, 3, 5],
    'gamma': [1, 3, 5],
    'n_estimators': [300, 500, 700],
    'alpha': [0.01, 0.1, 1],
    'colsample_bytree': [0.8, 0.9, 1]
}

# Initialisation du modèle XGBoost
xgb = XGBClassifier(random_state=42)

# Initialiser GridSearchCV pour ajuster les hyperparamètres du modèle
grid_search = GridSearchCV(xgb, param_grid, cv=5)

# Fit du modèle en utilisant les données d'entraînement
grid_search.fit(X_train, y_train)

# Affichage des meilleurs hyperparamètres trouvés
print("Meilleurs hyperparamètres : ", grid_search.best_params_)

# Sauvegarde des meilleurs hyperparamètres trouvés
xgb_best_param = grid_search.best_params_

# Instanciation du modèle avec les meilleurs hyperparamètres
xgb_optimized = XGBClassifier(**grid_search.best_params_)

# Entraînement du modèle sur les données d'entraînement
xgb_optimized.fit(X_train, y_train)

# Utilisation des hyperparamètres pour faire des prédictions sur les données de test
y_pred = xgb_optimized.predict(X_test)

# Calcul de l'accuracy du modèle
accuracy = accuracy_score(y_test, y_pred)

# Affichage de l'accuracy du modèle
print("Accuracy XGBoost :", accuracy)

Pour aller plus loin

Vidéos sur le Gradient Boost de StatQuest :

Vidéos sur le XGBoost de StatQuest :

Conclusion

Maintenant que vous êtes un peu plus familiers avec le Gradient Boosting vous pouvez explorer toutes les possibilités offertes par ces modèles et monter tout en haut du classement de votre compétition Kaggle préférée !

N’hésitez pas à me demander en commentaire si vous avez besoin d’aide 🙂