Logos
in

XGBoost, l’algorithme qui cartonne dans les compétitions Kaggle

XGBoost est l’un des algorithmes d’apprentissage automatique supervisé les plus utilisés aujourd’hui. Cela est dû à sa facilité de mise en œuvre, à ses bons résultats et au fait qu’il est prédéfini dans de nombreuses langues. Dans cet article, nous allons apprendre à l’implémenter en Python.

Pour ce post, je suppose que vous avez déjà des connaissances sur les algorithmes assemblés avec boosting (si ça vous semble chinois, voici un post expliquant de quoi il s’agit) et régularisation .

Qu’est-ce que XGBoost ?

L’eXtreme Gradient Boost est la bibliothèque/algorithme la plus en vogue dans les problèmes supervisés (Voici un lien vers la documentation officielle ).

Cet algorithme a été initialement créé en C++. Mais avec le temps et ses bons résultats, il a été développé dans plus de langages de programmation. Tellement qu’en ce moment il est déjà disponible dans tous les langages les plus utilisés pour l’analyse de données (Python, R, Scala, Julia, Java etc).

Je vous dis déjà que XGBoost c’est du lait, mais… pourquoi ?

C’est un algorithme parallélisable . Cela nous permet d’utiliser de manière optimale toute la puissance de traitement dont nous disposons aujourd’hui. Plusieurs cœurs peuvent être utilisés en même temps. Mais cela vous permet également de l’exécuter sur des GPU en parallèle, voire sur des clusters de serveurs. C’est-à-dire qu’il a une vitesse d’entraînement brutale . Cela rend la formation du modèle sur d’énormes ensembles de données moins problématique que pour un autre algorithme.

Il améliore les performances de la grande majorité des algorithmes qui existent dans presque toutes les compétitions de Machine Learning. Grâce à ces performances puissantes, XGBoost a réussi à démontrer des résultats de pointe dans une grande variété de benchmarks d’apprentissage automatique.

Exemple de mise en œuvre

L’API de la bibliothèque XGBoost est très simple et a la même structure que Liberia de SKLearn avec fit() et predict(). Voyons comment cela se fait avec un exemple simple de Kaggle. Nous avons des données sur différents vins et une colonne cible qui est la qualité. Pour simplifier le problème, nous allons en faire un problème de classification. On va simplement classer le vin en bon (qualité >= 6) ou en mauvais (qualité < 6).

Pour vérifier si c’est vrai ce que nous disons que XGBoost tend à améliorer les performances des autres algorithmes, je vais le comparer avec une régression linéaire de SKLearn. Les deux avec les paramètres par défaut :

import xgboost as xgb
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression as LR
from sklearn.model_selection import train_test_split

data = pd.read_csv('https://docaufutur.b-cdn.net/content/winequality-red.csv')

''' 
Vamos a hacer un problema de clasificacion. Asi que lo que vamos a predecir es
si el vino es de buena calidad o no. Tomaremos el 6 como umbral para decidir si
es bueno o no. 
'''
data.loc[data['quality'] < 6, 'quality'] = 0
data.loc[data['quality'] >= 6, 'quality'] = 1

# Separamos los datos en variables y target
X,y = data.iloc[:, :-1], data.iloc[:,-1]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2,
                                                    random_state=123)

clf_xgb = xgb.XGBClassifier(objective='binary:logistic', n_estimators=10,
                            seed=123)
clf_xgb.fit(X_train, y_train)
preds_xgb = clf_xgb.predict(X_test)

clf_lr = LR().fit(X_train, y_train)

accuracy_xgb = float(np.sum(preds_xgb == y_test))/y_test.shape[0]
print('Accuracy de XGBoost: ', accuracy_xgb)

accuracy_lr = clf_lr.score(X_test, y_test)
print('Accuracy de Regresion Lineal: ', accuracy_lr)

Comme je vous l’ai dit tout au long de l’article, XGBoost est très puissant. Ici, nous voyons comment avec cela nous avons une précision de 67% alors que la régression linéaire nous donne un mauvais 26% .

Je vous apporte également un article dans lequel ils analysent l’algorithme XGBoost en le comparant à d’autres algorithmes basés sur des arbres tels que RandomForest et Gradient Boosting Machine. Ils discutent des hyperparamètres qui peuvent être réglés ( psssst, êtes-vous cool avec le réglage ? Apprenez ce que c’est ici ) et comment les performances changent avec. Si vous voulez voir plus de ce travail, je vous laisse également le lien vers son GitHub .

Quand utiliser XGBoost ?

Vous devriez envisager de tester les performances de l’algorithme sur tout problème supervisé qui répond aux caractéristiques suivantes :

  • Pour les grands ensembles de données (plus de 1000 observations, c’est parce que le boosting s’améliore avec les itérations) et le nombre de variables est inférieur au nombre d’observations .
  • Pour les problèmes avec un mélange de variables catégorielles et numériques, ou uniquement des variables numériques (contrairement à la régression linéaire , KNN ou K-Means , cet algorithme accepte les variables catégorielles telles quelles).

Quand n’est-ce pas une bonne idée d’utiliser XGBoost ?

Il existe une grande variété de problèmes supervisés dans lesquels d’autres algorithmes de Deep Learning sont capables de nous donner de bien meilleures performances que XGBoost. Parmi eux, les plus importants sont :

  • Reconnaissance d’images
  • Problèmes de vision par ordinateur
  • PNL

Aujourd’hui, j’ai expliqué ce qu’est XGBoost et pourquoi c’est l’algorithme le plus en vogue actuellement. Dans le prochain article, j’expliquerai les hyperparamètres dont il dispose et comment les régler pour obtenir les meilleures performances.

Hetu
Lucie Wellgarde

Afin d'inciter mes lecteurs à s'intéresser au sujet, je m'efforce de présenter un assortiment varié de documents. Outre des informations sur l'alimentation et la politique asiatiques, africaines et américaines, j'aborde également la technologie et la politique.

Written by Lucie Wellgarde

Afin d'inciter mes lecteurs à s'intéresser au sujet, je m'efforce de présenter un assortiment varié de documents. Outre des informations sur l'alimentation et la politique asiatiques, africaines et américaines, j'aborde également la technologie et la politique.