Exercices Machine Learning GradientBoosting : le modèle qui gagne les competitions
🎉

Bravo!

Avancé 🧠 Fondamentaux 30 XP 0 personnes ont réussi

GradientBoosting : le modèle qui gagne les competitions

Si tu regardes les solutions gagnantes sur Kaggle pour les donnees tabulaires, tu verras presque toujours du Gradient Boosting. XGBoost, LightGBM, CatBoost : ces noms que tu croises partout dans les offres d'emploi data, ce sont tous des variantes du Gradient Boosting.

L'idee : au lieu d'entrainer des arbres independants (comme le Random Forest), on entraine des arbres sequentiellement. Chaque nouvel arbre se concentre sur les erreurs du précédent. C'est comme un eleve qui revise en se concentrant sur les exercices qu'il a rates.

Paramètres importants :
n_estimators : nombre d'arbres (plus = meilleur mais plus lent)
learning_rate : vitesse d'apprentissage (plus petit = plus stable)
max_depth : profondeur de chaque arbre (souvent 3-5)

from sklearn.ensemble import GradientBoostingClassifier

Écris une fonction gradient_boosting(X_train, y_train, X_test, y_test, n_estimators=100, learning_rate=0.1, max_depth=3) qui entraine un GradientBoosting et renvoie :
'accuracy' : accuracy sur le test set
'train_accuracy' : accuracy sur le train set (pour detecter l'overfitting)
'importances' : liste des importances triee par ordre decroissant (list de floats)

Tests (4/4)

Accuracy test raisonnable
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=300, n_features=5, random_state=42)
result = gradient_boosting(X[:200], y[:200], X[200:], y[200:])
assert result['accuracy'] > 0.5
Train accuracy >= test accuracy
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=300, n_features=5, random_state=42)
result = gradient_boosting(X[:200], y[:200], X[200:], y[200:])
assert result['train_accuracy'] >= result['accuracy'] - 0.1
Importances triees
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=200, n_features=5, random_state=42)
result = gradient_boosting(X[:150], y[:150], X[150:], y[150:])
assert result['importances'] == sorted(result['importances'], reverse=True)
Paramètres modifient le résultat
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=200, n_features=5, random_state=42)
r1 = gradient_boosting(X[:150], y[:150], X[150:], y[150:], n_estimators=10)
r2 = gradient_boosting(X[:150], y[:150], X[150:], y[150:], n_estimators=200)
assert isinstance(r1['accuracy'], float) and isinstance(r2['accuracy'], float)

Indices (3 disponibles)

solution.py