Introduction
Ce laboratoire vous guidera dans la mise en œuvre d'un classifieur Gradient Boosting avec des estimations out-of-bag (OOB) à l'aide de la bibliothèque scikit-learn en Python. Les estimations OOB sont une alternative aux estimations de validation croisée et peuvent être calculées en direct sans avoir besoin de refit de modèle répété. Ce laboratoire couvrira les étapes suivantes :
- Générer des données
- Ajuster le classifieur avec des estimations OOB
- Estimer le meilleur nombre d'itérations en utilisant la validation croisée
- Calculer le meilleur nombre d'itérations pour les données de test
- Tracer les résultats
Conseils sur la machine virtuelle
Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour la pratique.
Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.
Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.
Générer des données
La première étape consiste à générer quelques données d'exemple que nous pouvons utiliser pour entraîner et tester notre modèle. Nous utiliserons la fonction make_classification du module sklearn.datasets pour générer un problème de classification binaire aléatoire avec 3 caractéristiques informatives.
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=1000, n_features=3, n_informative=3,
n_redundant=0, n_classes=2, random_state=1)
Ajuster le classifieur avec des estimations OOB
Ensuite, nous allons créer un classifieur Gradient Boosting avec des estimations OOB à l'aide de la classe GradientBoostingClassifier du module sklearn.ensemble. Nous définirons le nombre d'estimateurs sur 100 et le taux d'apprentissage sur 0,1.
from sklearn.ensemble import GradientBoostingClassifier
params = {
"n_estimators": 100,
"learning_rate": 0.1,
"subsample": 1.0,
"max_depth": 3,
"min_samples_leaf": 1,
"random_state": 1,
"oob_score": True
}
clf = GradientBoostingClassifier(**params)
clf.fit(X, y)
Estimer le meilleur nombre d'itérations en utilisant la validation croisée
Nous pouvons estimer le meilleur nombre d'itérations en utilisant la validation croisée. Nous utiliserons une validation croisée à 5 plis et calculerons la perte logarithmique négative pour chaque nombre d'itérations.
from sklearn.model_selection import cross_val_score
cv_scores = []
for i in range(1, params['n_estimators'] + 1):
clf.set_params(n_estimators=i)
scores = -1 * cross_val_score(clf, X, y, cv=5, scoring='neg_log_loss')
cv_scores.append(scores.mean())
Calculer le meilleur nombre d'itérations pour les données de test
Nous pouvons également calculer le meilleur nombre d'itérations pour les données de test. Nous allons calculer la perte logarithmique négative pour chaque nombre d'itérations sur les données de test.
from sklearn.metrics import log_loss
import matplotlib.pyplot as plt
test_scores = []
for i, y_pred in enumerate(clf.staged_predict_proba(X)):
score = log_loss(y, y_pred)
test_scores.append(score)
best_n_estimators = np.argmin(test_scores) + 1
Tracer les résultats
Enfin, nous pouvons tracer les résultats pour visualiser les performances du modèle pour différents nombres d'itérations. Nous allons tracer la perte logarithmique négative sur l'axe des y et le nombre d'itérations sur l'axe des x.
plt.figure(figsize=(10, 5))
plt.plot(range(1, params['n_estimators'] + 1), cv_scores, label='CV')
plt.plot(range(1, params['n_estimators'] + 1), test_scores, label='Test')
plt.axvline(x=best_n_estimators, color='red', linestyle='--')
plt.xlabel('Nombre d\'itérations')
plt.ylabel('Perte logarithmique négative')
plt.legend()
plt.show()
Sommaire
Dans ce laboratoire, nous avons appris à implémenter un classifieur Gradient Boosting avec des estimations hors-bag et à estimer le meilleur nombre d'itérations en utilisant la validation croisée. Nous avons également calculé le meilleur nombre d'itérations pour les données de test et tracé les résultats pour visualiser les performances du modèle pour différents nombres d'itérations.