Introduction
Ce laboratoire montre comment utiliser la classification par processus gaussien (GPC) dans la bibliothèque scikit-learn pour Python. L'objectif est de montrer comment entraîner et tester un modèle GPC, tracer des lignes d'iso-probabilité et évaluer les performances de classification.
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.
Importation des bibliothèques requises
Tout d'abord, nous devons importer les bibliothèques requises.
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import cm
from sklearn.gaussian_process import GaussianProcessClassifier
from sklearn.gaussian_process.kernels import DotProduct, ConstantKernel as C
Préparer les données
Nous allons générer des données synthétiques pour la classification. La fonction à classifier est définie comme suit :
def g(x):
"""La fonction à prédire (la classification consistera ensuite à prédire
si g(x) <= 0 ou non)"""
return 5.0 - x[:, 1] - 0.5 * x[:, 0] ** 2.0
Ensuite, nous devons créer la conception des expériences et les observations.
## Quelques constantes
lim = 8
## Conception des expériences
X = np.array(
[
[-4.61611719, -6.00099547],
[4.10469096, 5.32782448],
[0.00000000, -0.50000000],
[-6.17289014, -4.6984743],
[1.3109306, -6.93271427],
[-5.03823144, 3.10584743],
[-2.87600388, 6.74310541],
[5.21301203, 4.26386883],
]
)
## Observations
y = np.array(g(X) > 0, dtype=int)
Entraîner le modèle
Nous allons utiliser un modèle GPC pour classifier les données. Tout d'abord, nous devons spécifier la fonction noyau.
kernel = C(0.1, (1e-5, np.inf)) * DotProduct(sigma_0=0.1) ** 2
Ensuite, nous pouvons créer un modèle GPC et l'entraîner à l'aide des données.
gp = GaussianProcessClassifier(kernel=kernel)
gp.fit(X, y)
Évaluer le modèle
Nous allons évaluer les performances de classification du modèle GPC entraîné. Nous allons générer une grille de points et calculer les probabilités prédites pour chaque point à l'aide du modèle entraîné.
## Évaluer la fonction réelle et la probabilité prédite
res = 50
x1, x2 = np.meshgrid(np.linspace(-lim, lim, res), np.linspace(-lim, lim, res))
xx = np.vstack([x1.reshape(x1.size), x2.reshape(x2.size)]).T
y_true = g(xx)
y_prob = gp.predict_proba(xx)[:, 1]
y_true = y_true.reshape((res, res))
y_prob = y_prob.reshape((res, res))
Tracer les résultats
Nous allons tracer les lignes d'iso-probabilité et la frontière de classification du modèle GPC.
## Tracer les valeurs iso de la classification probabiliste
fig = plt.figure(1)
ax = fig.gca()
ax.axes.set_aspect("égal")
plt.xticks([])
plt.yticks([])
ax.set_xticklabels([])
ax.set_yticklabels([])
plt.xlabel("$x_1$")
plt.ylabel("$x_2$")
cax = plt.imshow(y_prob, cmap=cm.gray_r, alpha=0.8, extent=(-lim, lim, -lim, lim))
norm = plt.matplotlib.colors.Normalize(vmin=0.0, vmax=0.9)
cb = plt.colorbar(cax, ticks=[0.0, 0.2, 0.4, 0.6, 0.8, 1.0], norm=norm)
cb.set_label(r"${\rm \mathbb{P}}\left[\widehat{G}(\mathbf{x}) \leq 0\right]$")
plt.clim(0, 1)
plt.plot(X[y <= 0, 0], X[y <= 0, 1], "r.", markersize=12)
plt.plot(X[y > 0, 0], X[y > 0, 1], "b.", markersize=12)
plt.contour(x1, x2, y_true, [0.0], colors="k", linestyles="dashdot")
cs = plt.contour(x1, x2, y_prob, [0.666], colors="b", linestyles="solide")
plt.clabel(cs, fontsize=11)
cs = plt.contour(x1, x2, y_prob, [0.5], colors="k", linestyles="tirets")
plt.clabel(cs, fontsize=11)
cs = plt.contour(x1, x2, y_prob, [0.334], colors="r", linestyles="solide")
plt.clabel(cs, fontsize=11)
plt.show()
Sommaire
Dans ce laboratoire, nous avons appris à utiliser la classification par processus gaussien (GPC) dans la bibliothèque scikit - learn pour Python. Nous avons montré comment entraîner et tester un modèle GPC, tracer des lignes d'iso - probabilité et évaluer les performances de classification.