Introduction à l'intelligence artificielle: comprendre le Machine Learning

Auteur: Mohamed CHINY Durée necessaire pour le cours de Introduction à l'intelligence artificielle: comprendre le Machine Learning Niveau recommandé pour le cours de Introduction à l'intelligence artificielle: comprendre le Machine Learning Supports vidéo non disponibles pour ce cours Exercices de renforcement non disponibles pour ce cours Quiz non disponibles pour ce cours

Page 19: Random Forest, une application du Bagging en Ensemble Learning

Toutes les pages

Introduction à l'intelligence artificielle: comprendre le Machine Learning

Page 1
Intelligence artificielle: Définition, histoire et évolution
Page 2
Types d'apprentissage: supervisé, non supervisé et par renforcement
Page 3
Qu'est-ce qu'un dataset? Tout commence par les données
Page 4
Analyse exploratoire des données (EDA)
Page 5
Apprentissage supervisé - La régression
Page 6
Apprentissage supervisé - La classification
Page 7
Comment un modèle de Machine Learning apprend-il?
Page 8
Régression linéaire simple avec NumPy, scikit-learn et Matplotlib
Page 9
Régression linéaire multiple avec les DataFrames de Pandas
Page 10
Séparation du jeu de données en ensembles d'entraînement et de test
Page 11
Régression linéaire multiple avec découpage des données en train set et test set
Page 12
Classification supervisée avec la régression logistique
Page 13
Naive Bayes pour la classification: un modèle probabiliste génératif
Page 14
k-Nearest Neighbors (k-NN): Algorithme de classification non paramétrique basé sur les distances
Page 15
L'arbre de décision (decision tree): un outil puissant de classification
Page 16
Classification avec les Support Vector Machines (SVM)
Page 17
L'ensemble learning - Combiner plusieurs modèles pour une performance accrue
Page 18
Le Boosting: principe et mise en pratique avec XGBoost
Page 19
Random Forest, une application du Bagging en Ensemble Learning
Page 20
Le stacking: unir des modèles différents pour plus de performance
Page 21
La validation croisée: découper les données pour un meilleur apprentissage du modèle
Page 22
Recherche par grille avec validation croisée (GridSearchCV)

Le bagging: une approche clé de l'ensemble learning

Du bootstrap à l’agrégation: comprendre le bagging

Le bagging (Bootstrap Aggregating) est une méthode d’ensemble en apprentissage automatique (ensemble learning) qui vise à réduire la variance et à améliorer la robustesse des modèles prédictifs.

Le principe du bagging consiste à générer plusieurs sous‑ensembles de données d’entraînement en appliquant un échantillonnage aléatoire avec remise via une opération appelée bootstrap. C'est à dire que chaque sous‑ensemble est créé en tirant aléatoirement des observations dans le jeu de données initia. Ce qui implique qu'une même observation peut apparaître plusieurs fois dans un sous‑ensemble, tandis que d’autres peuvent ne pas y figurer du tout.

Le recours au bootstrap permet de générer une diversité entre les modèles entraînés, ce qui rend l’agrégation finale plus efficace pour réduire la variance et renforcer la stabilité des prédictions. Chaque sous‑ensemble de données sert à entraîner un modèle distinct dont les résultats sont ensuite combinés (par vote majoritaire en classification ou par moyenne en régression).

La combinaison de plusieurs modèles indépendants diminue le risque de surapprentissage inhérent à un modèle unique et conduit à des estimations plus robustes et fiables.

Le bagging avec les forêts aléatoires (Random Forest)

La forme la plus populaire du bagging est celle des forêts aléatoires (Random Forest), qui appliquent le principe du bootstrap aux arbres de décision tout en ajoutant une sélection aléatoire des variables.

Dans les forêts aléatoires, on commence par générer plusieurs sous‑ensembles de données grâce au bootstrap (échantillonnage aléatoire avec remise). Chaque sous‑ensemble sert à entraîner un arbre de décision indépendant, ce qui crée une première source de diversité entre les modèles.

La spécificité du Random Forest réside dans le fait que lors de chaque séparation d’un arbre, il ne prend en compte qu’un sous‑ensemble aléatoire des variables disponibles pour déterminer la meilleure coupure. Cette contrainte volontaire introduit une seconde source de diversité, ce qui empêche les arbres de se construire de manière trop similaire et renforce leur complémentarité.

Une fois l’ensemble des arbres générés, leurs prédictions sont combinées (par vote majoritaire pour les tâches de classification ou par moyenne pour les tâches de régression). Cette agrégation réduit considérablement la variance, limite le surapprentissage et améliore la robustesse des résultats.

En pratique, le Random Forest est reconnu pour offrir un excellent équilibre entre performance, stabilité et simplicité d’utilisation. Il s’adapte bien à des données complexes, permet d’évaluer l’importance relative des variables et reste moins sensible aux variations du jeu d’entraînement qu’un arbre de décision isolé.

Classification des survivants du Titanic avec Random Forest

Je présente à nouveau le code complet qui met en œuvre Random Forest sur le jeu de données Titanic. Comme les différentes étapes ont déjà été détaillées auparavant, je me concentrerai uniquement sur l’explication des éléments spécifiques à Random Forest.

Je propose ce code:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier

df = pd.read_csv("titanic.csv")

df = df[["Survived", "Pclass", "Sex", "Age", "SibSp", "Parch", "Fare"]].dropna()
df["Sex"] = df["Sex"].map({"male": 0, "female": 1})

X = df.drop("Survived", axis=1)
y = df["Survived"]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Chargement et entraînement du modèle Random Forest
clf = RandomForestClassifier(
   n_estimators=100,
   max_depth=None,
   random_state=42,
   n_jobs=-1
)

clf.fit(X_train, y_train)

y_pred = clf.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)
print(f"Exactitude sur le jeu de test : {accuracy:.2f}")

cm = confusion_matrix(y_test, y_pred)
print(cm)

print(classification_report(y_test, y_pred))
Voyons la signification des hyperparamètres qu'on l'on a fixé pour le modèle Random Forest:
  • n_estimators=100: Nombre d’arbres de décision construits dans la forêt. Plus ce nombre est élevé, plus le modèle est robuste (car il agrège davantage de prédictions), mais le temps de calcul augmente.
  • max_depth=None: Profondeur maximale des arbres. La valeur None signifie que chaque arbre est développé jusqu’à ce que toutes les feuilles soient pures (ou qu’il n’y ait plus assez d’échantillons pour diviser). Cela permet aux arbres d’apprendre des relations complexes, mais peut aussi les rendre plus sensibles au surapprentissage. L’agrégation du Random Forest compense généralement ce risque.
  • random_state=42: Graine aléatoire fixée pour assurer la reproductibilité des résultats. En fixant cette valeur, on obtient toujours les mêmes sous‑échantillons et donc les mêmes résultats à chaque exécution ce qui est essentiel pour comparer les expériences.
  • n_jobs=-1: Nombre de processeurs utilisés pour l’entraînement. La valeur -1 signifie que tous les cœurs disponibles de la machine seront exploités en parallèle. Cela accélère considérablement l’entraînement surtout avec un grand nombre d’arbres.

L'exécution du code produit ces résultats:
Exactitude sur le jeu de test : 0.78

[[ 73 14 ]
 [ 17 39 ]]
Random Forest rapport de performances sur le dataset Titanic
Là encore, je vous laisse le soin d'interpréter les résultats et, de préférence, les comparer avec ceux qu'on a obtenus avec les autres modèles sur le même jeu de données.          
         
Page 19
Random Forest, une application du Bagging en Ensemble Learning