Machine learning : bagging, gradient boosting, SVM avec Python
Objectifs pédagogiques
- Connaître et savoir mettre en œuvre les méthodes d’agrégation en régression et classification supervisée : bagging (random forest) et gradient boosting
- Connaître et savoir mettre en œuvre la méthode SVM en classification supervisée
- Savoir gérer empiriquement le risque de sur-apprentissage
Programme détaillé
Rappels sur les bases du machine learning 1h
Méthodes d’agrégation – bagging 3h
- Rappels sur les arbres de régression et de décision (CART)
- Bagging
- Random forest
- Importance des variables
- Applications sur cas pratiques
Méthodes d’agrégation – gradient boosting 3h
- Algorithme AdaBoost
- Principe du gradient boosting
- Quelques fonctions de coût classiques
- Applications sur cas pratiques
SVM 3h
- Cas linéairement séparable
- Ajout de variables ressort (slack variables)
- Astuce du noyau
- Applications sur cas pratiques
Introduction aux réseaux de neurones 2h
- Neurone formel
- Perceptron multicouche (MLP)
- Fonctions d’activation
Public visé
Data analysts, data scientists
Prérequis
- Connaissances de base en machine learning (formation Les fondamentaux du Machine learning avec Python).
- Connaissances intermédiaires de Python (formation Python intermédiaire).
Approche pédagogique
Calculés à partir de 10 avis recueillis depuis 06/12/2023, lors de 4 sessions de cette formation.
Forêts aléatoires, gradient boosting, SVM : quelle méthode pour des données tabulaires ?
Sur les images, le son ou le texte, le deep learning l’emporte nettement. Sur les données tabulaires, une ligne par client ou par contrat et une colonne par variable, c’est-à-dire l’essentiel des données d’entreprise, la hiérarchie est différente : les ensembles d’arbres y tiennent la corde depuis une quinzaine d’années.
Ce que disent les compétitions et les benchmarks
L’article qui présente la bibliothèque XGBoost (Chen et Guestrin, conférence KDD 2016) relève que, parmi les 29 solutions gagnantes de compétitions Kaggle publiées en 2015 sur le blog de la plateforme, 17 utilisaient XGBoost. En 2022, Léo Grinsztajn, Edouard Oyallon et Gaël Varoquaux (Inria) comparent arbres et réseaux de neurones sur 45 jeux de données tabulaires de taille moyenne, autour de 10 000 observations : forêts aléatoires et gradient boosting restent les meilleurs. Parmi leurs explications, les réseaux de neurones résistent mal aux variables non informatives et peinent à apprendre des fonctions irrégulières, faites de seuils et de ruptures, que les arbres capturent naturellement.
Le débat n’est pas clos : en janvier 2025, un article de Nature présente TabPFN, un modèle pré-entraîné qui dépasse le gradient boosting sur des jeux de moins de 10 000 observations. Ces modèles de fondation tabulaires ne sont pas traités dans cette formation.
Comparer les méthodes par validation croisée
Aucune méthode ne gagne partout : la seule façon de trancher sur un jeu de données est de comparer par validation croisée. Sur un jeu classique de 569 tumeurs décrites par 30 variables :
from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import HistGradientBoostingClassifier, RandomForestClassifier
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
X, y = load_breast_cancer(return_X_y=True)
modeles = {
"forêt aléatoire": RandomForestClassifier(random_state=0),
"gradient boosting": HistGradientBoostingClassifier(random_state=0),
"SVM brut": SVC(),
"SVM standardisé": make_pipeline(StandardScaler(), SVC()),
}
for nom, modele in modeles.items():
print(nom, cross_val_score(modele, X, y, cv=5).mean().round(3))
# forêt aléatoire 0.963 · gradient boosting 0.965 · SVM brut 0.912 · SVM standardisé 0.974
Ici, le SVM fait même un peu mieux que les ensembles, à une condition : standardiser les variables. Le SVM repose sur des distances entre observations, et une variable mesurée en centaines (la surface d’une tumeur) écrase une variable mesurée en dixièmes. Placer la standardisation dans un Pipeline garantit qu’elle est recalculée sur les seules données d’apprentissage de chaque pli. Les arbres, eux, ne dépendent que de l’ordre des valeurs : l’échelle ne change rien.
Le gradient boosting de scikit-learn
HistGradientBoostingClassifier, inspiré de la bibliothèque LightGBM, regroupe chaque variable en au plus 255 intervalles avant de chercher les découpages, ce qui le rend rapide sur de gros volumes, et il accepte les valeurs manquantes sans imputation préalable. XGBoost et LightGBM restent des bibliothèques séparées, très utilisées en compétition.
Les bases (validation croisée, régression pénalisée, arbres CART) sont l’objet des Fondamentaux du machine learning avec Python ; les réseaux de neurones, introduits en fin de programme, sont approfondis dans Les fondamentaux du Deep learning avec Python.