Introduction
Ceci est un tutoriel étape par étape pour démontrer l'effet des contraintes monotones sur un estimateur de gradient boosting. Le gradient boosting est une technique d'apprentissage automatique populaire utilisée pour les tâches de régression et de classification. Dans ce tutoriel, nous allons construire un ensemble de données artificiel et utiliser un estimateur de gradient boosting pour démontrer l'effet des contraintes monotones sur les prédictions du modèle.
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.
Importation des bibliothèques
Nous allons commencer par importer les bibliothèques nécessaires pour ce tutoriel.
from sklearn.ensemble import HistGradientBoostingRegressor
from sklearn.inspection import PartialDependenceDisplay
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
Générer des données
Nous allons générer un ensemble de données artificielles où la valeur cible est positivement corrélée avec la première caractéristique et négativement corrélée avec la seconde caractéristique. Nous ajouterons également du bruit aléatoire pour rendre les données plus réalistes.
rng = np.random.RandomState(0)
n_samples = 1000
f_0 = rng.rand(n_samples)
f_1 = rng.rand(n_samples)
X = np.c_[f_0, f_1]
noise = rng.normal(loc=0.0, scale=0.01, size=n_samples)
y = 5 * f_0 + np.sin(10 * np.pi * f_0) - 5 * f_1 - np.cos(10 * np.pi * f_1) + noise
Ajuster un modèle sans contraintes
Nous allons ajuster un modèle sur les données générées sans aucune contrainte pour voir comment le modèle se comporte sans restrictions.
gbdt_no_cst = HistGradientBoostingRegressor()
gbdt_no_cst.fit(X, y)
Ajuster un modèle avec des contraintes monotones
Nous allons maintenant ajuster un autre modèle sur les mêmes données, mais avec des contraintes monotones sur les caractéristiques. Nous allons imposer une contrainte d'augmentation monotone sur la première caractéristique et une contrainte de diminution monotone sur la seconde caractéristique.
gbdt_with_monotonic_cst = HistGradientBoostingRegressor(monotonic_cst=[1, -1])
gbdt_with_monotonic_cst.fit(X, y)
Afficher la dépendance partielle
Nous allons maintenant afficher la dépendance partielle des prédictions par rapport aux deux caractéristiques pour les deux modèles.
fig, ax = plt.subplots()
disp = PartialDependenceDisplay.from_estimator(
gbdt_no_cst,
X,
features=[0, 1],
feature_names=(
"Première caractéristique",
"Deuxième caractéristique",
),
line_kw={"linewidth": 4, "label": "non contraint", "color": "tab:blue"},
ax=ax,
)
PartialDependenceDisplay.from_estimator(
gbdt_with_monotonic_cst,
X,
features=[0, 1],
line_kw={"linewidth": 4, "label": "contraint", "color": "tab:orange"},
ax=disp.axes_,
)
for f_idx in (0, 1):
disp.axes_[0, f_idx].plot(
X[:, f_idx], y, "o", alpha=0.3, zorder=-1, color="tab:green"
)
disp.axes_[0, f_idx].set_ylim(-6, 6)
plt.legend()
fig.suptitle("Effet des contraintes monotones sur les dépendances partielles")
plt.show()
Utiliser les noms de caractéristiques pour spécifier les contraintes monotones
Si les données d'entraînement ont des noms de caractéristiques, il est possible de spécifier les contraintes monotones en passant un dictionnaire. Nous allons maintenant le démontrer en utilisant les mêmes données et en spécifiant les contraintes à l'aide des noms de caractéristiques.
X_df = pd.DataFrame(X, columns=["f_0", "f_1"])
gbdt_with_monotonic_cst_df = HistGradientBoostingRegressor(
monotonic_cst={"f_0": 1, "f_1": -1}
).fit(X_df, y)
np.allclose(
gbdt_with_monotonic_cst_df.predict(X_df), gbdt_with_monotonic_cst.predict(X)
)
Sommaire
Dans ce tutoriel, nous avons démontré l'effet des contraintes monotones sur un estimateur de gradient boosting. Nous avons généré un ensemble de données artificielles, ajusté deux modèles, l'un sans aucune contrainte et l'autre avec des contraintes monotones, et affiché la dépendance partielle des prédictions par rapport aux deux caractéristiques. Nous avons également démontré la manière de spécifier les contraintes monotones à l'aide des noms de caractéristiques.