Gaussian Process Klassifikation

Machine LearningMachine LearningBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab wird gezeigt, wie man Gaussian Process Classification (GPC) in der scikit-learn-Bibliothek für Python verwendet. Ziel ist es, zu zeigen, wie man ein GPC-Modell trainiert und testet, iso-Wahrscheinlichkeitslinien zeichnet und die Klassifizierungsleistung计算.

Tipps für die virtuelle Maschine

Nachdem der Start der virtuellen Maschine abgeschlossen ist, klicken Sie in der linken oberen Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen von Jupyter Notebook nicht automatisiert werden.

Wenn Sie während des Lernens Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/gaussian_process("Gaussian Processes") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/gaussian_process -.-> lab-49141{{"Gaussian Process Klassifikation"}} ml/sklearn -.-> lab-49141{{"Gaussian Process Klassifikation"}} end

Importieren der erforderlichen Bibliotheken

Zunächst müssen wir die erforderlichen Bibliotheken importieren.

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

Daten vorbereiten

Wir werden einige synthetische Daten für die Klassifizierung generieren. Die zu klassifizierende Funktion wird wie folgt definiert:

def g(x):
    """Die Funktion, die vorhergesagt werden soll (die Klassifizierung besteht dann darin, vorherzusagen,
    ob g(x) <= 0 oder nicht)"""
    return 5.0 - x[:, 1] - 0.5 * x[:, 0] ** 2.0

Anschließend müssen wir das Experimentdesign und die Beobachtungen erstellen.

## Einige Konstanten
lim = 8

## Experimentdesign
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],
    ]
)

## Beobachtungen
y = np.array(g(X) > 0, dtype=int)

Modell trainieren

Wir werden ein GPC-Modell verwenden, um die Daten zu klassifizieren. Zunächst müssen wir die Kernfunktion angeben.

kernel = C(0.1, (1e-5, np.inf)) * DotProduct(sigma_0=0.1) ** 2

Anschließend können wir ein GPC-Modell erstellen und es mit den Daten trainieren.

gp = GaussianProcessClassifier(kernel=kernel)
gp.fit(X, y)

Modell auswerten

Wir werden die Klassifizierungsleistung des trainierten GPC-Modells auswerten. Wir werden ein Gitter von Punkten generieren und die vorhergesagten Wahrscheinlichkeiten für jeden Punkt mit dem trainierten Modell berechnen.

## Evaluate real function and the predicted probability
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))

Ergebnisse plotten

Wir werden die Iso-Wahrscheinlichkeitslinien und die Klassifizierungsgrenze des GPC-Modells plotten.

## Plot the probabilistic classification iso-values
fig = plt.figure(1)
ax = fig.gca()
ax.axes.set_aspect("equal")
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="solid")
plt.clabel(cs, fontsize=11)

cs = plt.contour(x1, x2, y_prob, [0.5], colors="k", linestyles="dashed")
plt.clabel(cs, fontsize=11)

cs = plt.contour(x1, x2, y_prob, [0.334], colors="r", linestyles="solid")
plt.clabel(cs, fontsize=11)

plt.show()

Zusammenfassung

In diesem Lab haben wir gelernt, wie man Gaussian Process Classification (GPC) in der scikit-learn-Bibliothek für Python verwendet. Wir haben gezeigt, wie man ein GPC-Modell trainiert und testet, Iso-Wahrscheinlichkeitslinien plottert und die Klassifizierungsleistung auswertet.