Exercice 88 / 100

ML — Random Forest

Compare Random Forest vs Decision Tree

Random Forest = ensemble de nombreux arbres de décision dont on moyenne les prédictions. Beaucoup plus performant et stable qu'un seul arbre.

Deux astuces clés

1. BAGGING : chaque arbre est entraîné sur un échantillon BOOTSTRAP (tirage avec remise) du train set 2. SOUS-ENSEMBLE de features : à chaque split, on ne considère qu'un sous-ensemble aléatoire des features

Ces 2 sources d'aléa décorrellent les arbres → le vote majoritaire réduit la variance.

Une forêt tire au sort deux fois : les lignes de chaque arbre, avec remise, et les features examinées à chaque question. C'est cet aléa qui décorrèle les arbres et rend leur vote plus stable qu'un arbre seul

Workflow sklearn

from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_estimators=100, random_state=42) rf.fit(X_train, y_train) rf.score(X_test, y_test)

Hyperparamètres utiles

n_estimators=100 nombre d'arbres (plus = mieux mais plus lent) max_depth=None profondeur max (None = pas de limite) max_features='sqrt' nb de features à considérer à chaque split min_samples_split=2 n_jobs=-1 utilise tous les cœurs CPU random_state=42 reproductibilité

Feature importance

rf.feature_importances_ moyenne des importances sur tous les arbres

Plus robuste qu'un seul arbre.

Comparaison Tree vs Forest

import numpy as np from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import cross_val_score
np.random.seed(42) X = np.random.randn(300, 5) y = (X[:, 0] + X[:, 1] - X[:, 2] > 0).astype(int)
tree = DecisionTreeClassifier(random_state=42) rf = RandomForestClassifier(n_estimators=100, random_state=42)
tree_scores = cross_val_score(tree, X, y, cv=5) rf_scores = cross_val_score(rf, X, y, cv=5)
print(f'Tree: {tree_scores.mean():.4f} (+/- {tree_scores.std():.4f})') print(f'Forest: {rf_scores.mean():.4f} (+/- {rf_scores.std():.4f})')

Variantes / cousins

RandomForestRegressor
version régression
ExtraTreesClassifier
variante plus aléatoire
GradientBoostingClassifier
boosting (séquentiel, souvent meilleur)
XGBoost / LightGBM / CatBoost les références en compétition

Pour de la donnée tabulaire, Random Forest et le gradient boosting sont presque toujours dans le top 3 des modèles à essayer en premier.

exercise.py

Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →