Régression par gradient boosting

Machine LearningMachine LearningBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous utiliserons Gradient Boosting pour construire un modèle prédictif pour la tâche de régression du diabète. Nous allons entraîner le modèle sur l'ensemble de données du diabète et obtenir les résultats de sklearn.ensemble.GradientBoostingRegressor avec une perte de moindres carrés et 500 arbres de régression de profondeur 4.

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 Carnet de notes 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 des commentaires après la session, et nous résoudrons rapidement le problème pour vous.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills ml/sklearn -.-> lab-49153{{"Régression par gradient boosting"}} end

Charger les données

Tout d'abord, nous allons charger l'ensemble de données du diabète.

diabetes = datasets.load_diabetes()
X, y = diabetes.data, diabetes.target

Prétraitement des données

Ensuite, nous allons diviser notre ensemble de données pour utiliser 90 % pour l'entraînement et laisser le reste pour les tests. Nous allons également définir les paramètres du modèle de régression.

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=13)

params = {
    "n_estimators": 500,
    "max_depth": 4,
    "min_samples_split": 5,
    "learning_rate": 0.01,
    "loss": "squared_error",
}

Ajuster le modèle de régression

Maintenant, nous allons initialiser les régresseurs Gradient Boosting et l'ajuster avec nos données d'entraînement. Regardons également l'erreur quadratique moyenne sur les données de test.

reg = ensemble.GradientBoostingRegressor(**params)
reg.fit(X_train, y_train)

mse = mean_squared_error(y_test, reg.predict(X_test))
print("The mean squared error (MSE) on test set: {:.4f}".format(mse))

Tracer la déviation d'entraînement

Enfin, nous allons visualiser les résultats. Pour cela, nous allons tout d'abord calculer la déviation de l'ensemble de test puis la tracer en fonction des itérations de boosting.

test_score = np.zeros((params["n_estimators"],), dtype=np.float64)
for i, y_pred in enumerate(reg.staged_predict(X_test)):
    test_score[i] = mean_squared_error(y_test, y_pred)

fig = plt.figure(figsize=(6, 6))
plt.subplot(1, 1, 1)
plt.title("Deviance")
plt.plot(
    np.arange(params["n_estimators"]) + 1,
    reg.train_score_,
    "b-",
    label="Training Set Deviance",
)
plt.plot(
    np.arange(params["n_estimators"]) + 1, test_score, "r-", label="Test Set Deviance"
)
plt.legend(loc="upper right")
plt.xlabel("Boosting Iterations")
plt.ylabel("Deviance")
fig.tight_layout()
plt.show()

Tracer l'importance des fonctionnalités

Pour cet exemple, nous utiliserons les importances des fonctionnalités basées sur l'impureté pour identifier les fonctionnalités les plus prédictives.

feature_importance = reg.feature_importances_
sorted_idx = np.argsort(feature_importance)
pos = np.arange(sorted_idx.shape[0]) + 0.5
fig = plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.barh(pos, feature_importance[sorted_idx], align="center")
plt.yticks(pos, np.array(diabetes.feature_names)[sorted_idx])
plt.title("Feature Importance (MDI)")

Tracer l'importance de la permutation

Nous utiliserons la méthode de permutation pour identifier les fonctionnalités les plus prédictives.

result = permutation_importance(
    reg, X_test, y_test, n_repeats=10, random_state=42, n_jobs=2
)
sorted_idx = result.importances_mean.argsort()
plt.subplot(1, 2, 2)
plt.boxplot(
    result.importances[sorted_idx].T,
    vert=False,
    labels=np.array(diabetes.feature_names)[sorted_idx],
)
plt.title("Permutation Importance (test set)")
fig.tight_layout()
plt.show()

Sommaire

Dans ce laboratoire, nous avons utilisé Gradient Boosting pour construire un modèle prédictif pour la tâche de régression du diabète. Nous avons chargé les données, les prétraitées, ajusté le modèle de régression et visualisé les résultats en traçant la déviation d'entraînement, l'importance des fonctionnalités et l'importance de la permutation.