Classification par processus gaussien

Beginner

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

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.