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 featuresCes 2 sources d'aléa décorrellent les arbres → le vote majoritaire réduit la variance.
from sklearn.ensemble import RandomForestClassifierrf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)
rf.score(X_test, y_test)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érf.feature_importances_ moyenne des importances sur tous les arbresPlus robuste qu'un seul arbre.
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_scorenp.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})')XGBoost / LightGBM / CatBoost les références en compétitionPour 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 →