Introduction
Ce laboratoire montre comment discrétiser des caractéristiques continues à l'aide de la classe KBinsDiscretizer dans Scikit-learn. La discrétisation est le processus consistant à transformer des caractéristiques continues en caractéristiques discrètes en divisant les valeurs des caractéristiques en un ensemble de classes. Cela peut être utile lorsqu'on travaille avec des modèles linéaires qui ne peuvent modéliser que des relations linéaires, ou pour réduire la complexité des arbres de décision.
Conseils sur la machine virtuelle
Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour passer à 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 limites 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églerons rapidement le problème pour vous.
Charger les bibliothèques requises
Dans cette étape, nous allons importer les bibliothèques requises.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import KBinsDiscretizer
from sklearn.tree import DecisionTreeRegressor
Créer l'ensemble de données
Dans cette étape, nous allons créer un ensemble de données avec une caractéristique d'entrée continue et une caractéristique de sortie continue. Nous utiliserons la méthode numpy.random.RandomState() pour générer des nombres aléatoires pour la caractéristique d'entrée, et la méthode numpy.sin() pour générer la caractéristique de sortie.
rnd = np.random.RandomState(42)
X = rnd.uniform(-3, 3, size=100)
y = np.sin(X) + rnd.normal(size=len(X)) / 3
X = X.reshape(-1, 1)
Visualiser l'ensemble de données
Dans cette étape, nous allons visualiser l'ensemble de données à l'aide d'un graphique de dispersion.
plt.scatter(X, y, color='black')
plt.show()
Discrétiser la caractéristique d'entrée
Dans cette étape, nous allons utiliser la classe KBinsDiscretizer pour discrétiser la caractéristique d'entrée. Nous allons créer 10 classes et utiliser le codage one-hot pour transformer les données.
enc = KBinsDiscretizer(n_bins=10, encode="onehot")
X_binned = enc.fit_transform(X)
Visualiser l'ensemble de données discrétisé
Dans cette étape, nous allons visualiser l'ensemble de données discrétisé à l'aide d'un graphique de dispersion.
plt.scatter(X_binned, y, color='black')
plt.show()
Entraîner un modèle de régression linéaire
Dans cette étape, nous allons entraîner un modèle de régression linéaire sur l'ensemble de données original.
reg = LinearRegression().fit(X, y)
Entraîner un modèle d'arbre de décision
Dans cette étape, nous allons entraîner un modèle d'arbre de décision sur l'ensemble de données original.
reg = DecisionTreeRegressor(min_samples_split=3, random_state=0).fit(X, y)
Entraîner un modèle de régression linéaire sur l'ensemble de données discrétisé
Dans cette étape, nous allons entraîner un modèle de régression linéaire sur l'ensemble de données discrétisé.
reg = LinearRegression().fit(X_binned, y)
Entraîner un modèle d'arbre de décision sur l'ensemble de données discrétisé
Dans cette étape, nous allons entraîner un modèle d'arbre de décision sur l'ensemble de données discrétisé.
reg = DecisionTreeRegressor(min_samples_split=3, random_state=0).fit(X_binned, y)
Visualiser les résultats
Dans cette étape, nous allons visualiser les résultats des modèles de régression linéaire et d'arbre de décision avant et après discrétisation.
## prédire avec l'ensemble de données original
fig, (ax1, ax2) = plt.subplots(ncols=2, sharey=True, figsize=(10, 4))
line = np.linspace(-3, 3, 1000, endpoint=False).reshape(-1, 1)
reg = LinearRegression().fit(X, y)
ax1.plot(line, reg.predict(line), linewidth=2, color="green", label="régression linéaire")
reg = DecisionTreeRegressor(min_samples_split=3, random_state=0).fit(X, y)
ax1.plot(line, reg.predict(line), linewidth=2, color="red", label="arbre de décision")
ax1.plot(X[:, 0], y, "o", c="k")
ax1.legend(loc="best")
ax1.set_ylabel("Sortie de régression")
ax1.set_xlabel("Caractéristique d'entrée")
ax1.set_title("Résultat avant discrétisation")
## prédire avec l'ensemble de données transformé
line_binned = enc.transform(line)
reg = LinearRegression().fit(X_binned, y)
ax2.plot(
line,
reg.predict(line_binned),
linewidth=2,
color="green",
linestyle="-",
label="régression linéaire",
)
reg = DecisionTreeRegressor(min_samples_split=3, random_state=0).fit(X_binned, y)
ax2.plot(
line,
reg.predict(line_binned),
linewidth=2,
color="red",
linestyle=":",
label="arbre de décision",
)
ax2.plot(X[:, 0], y, "o", c="k")
ax2.vlines(enc.bin_edges_[0], *plt.gca().get_ylim(), linewidth=1, alpha=0.2)
ax2.legend(loc="best")
ax2.set_xlabel("Caractéristique d'entrée")
ax2.set_title("Résultat après discrétisation")
plt.tight_layout()
plt.show()
Sommaire
Dans ce laboratoire, nous avons appris à discrétiser les caractéristiques continues à l'aide de la classe KBinsDiscretizer dans Scikit-learn. La discrétisation peut être utile lorsqu'on travaille avec des modèles linéaires ou pour réduire la complexité des arbres de décision. Nous avons également appris à entraîner des modèles de régression linéaire et d'arbre de décision sur les ensembles de données originaux et discrétisés, et à visualiser les résultats.