Exercice 88 / 100

ML — Random Forest

ConsigneCompare Random Forest vs Decision Tree

📖 Cours

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 set2. 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
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 splitmin_samples_split=2n_jobs=-1 utilise tous les cœurs CPUrandom_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 npfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.ensemble import RandomForestClassifierfrom 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.

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