Gaussian-Prozess-Regressionsmodell anpassen

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 werden wir lernen, wie wir die Gaussian Process Regression verwenden, um ein Modell an einen Datensatz anzupassen. Wir werden einen synthetischen Datensatz generieren und die Gaussian Process Regression verwenden, um ein Modell an ihn anzupassen. Wir werden die scikit-learn-Bibliothek verwenden, um die Gaussian Process Regression durchzuführen.

VM-Tipps

Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.

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 bei der Lernphase 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-49145{{"Gaussian-Prozess-Regressionsmodell anpassen"}} ml/sklearn -.-> lab-49145{{"Gaussian-Prozess-Regressionsmodell anpassen"}} end

Datensatzgenerierung

Wir werden einen synthetischen Datensatz generieren. Der wahre Generierungsprozess ist definiert als f(x) = x sin(x).

import numpy as np

X = np.linspace(start=0, stop=10, num=1_000).reshape(-1, 1)
y = np.squeeze(X * np.sin(X))

import matplotlib.pyplot as plt

plt.plot(X, y, label=r"$f(x) = x \sin(x)$", linestyle="dotted")
plt.legend()
plt.xlabel("$x$")
plt.ylabel("$f(x)$")
_ = plt.title("True generative process")

Rauschfreies Ziel

In diesem Schritt werden wir den wahren Generierungsprozess verwenden, ohne irgendeinen Rausch hinzuzufügen. Für das Training der Gaussian Process Regression werden wir nur einige wenige Stichproben auswählen.

rng = np.random.RandomState(1)
training_indices = rng.choice(np.arange(y.size), size=6, replace=False)
X_train, y_train = X[training_indices], y[training_indices]

from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF

kernel = 1 * RBF(length_scale=1.0, length_scale_bounds=(1e-2, 1e2))
gaussian_process = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=9)
gaussian_process.fit(X_train, y_train)
gaussian_process.kernel_

Vorhersagen und Konfidenzintervalle

Nachdem wir unser Modell angepasst haben, sehen wir, dass die Hyperparameter des Kerns optimiert wurden. Nun werden wir unseren Kern verwenden, um die mittlere Vorhersage des gesamten Datensatzes zu berechnen und das 95%-Konfidenzintervall zu plotten.

mean_prediction, std_prediction = gaussian_process.predict(X, return_std=True)

plt.plot(X, y, label=r"$f(x) = x \sin(x)$", linestyle="dotted")
plt.scatter(X_train, y_train, label="Beobachtungen")
plt.plot(X, mean_prediction, label="Mittlere Vorhersage")
plt.fill_between(
    X.ravel(),
    mean_prediction - 1.96 * std_prediction,
    mean_prediction + 1.96 * std_prediction,
    alpha=0.5,
    label=r"95%-Konfidenzintervall",
)
plt.legend()
plt.xlabel("$x$")
plt.ylabel("$f(x)$")
_ = plt.title("Gaussian process regression on noise-free dataset")

Rauschbehaftete Ziele

Wir können ein ähnliches Experiment wiederholen und diesmal zusätzlichen Rausch zum Ziel hinzufügen. Dadurch können wir den Effekt des Rauschs auf das angepasste Modell sehen.

noise_std = 0.75
y_train_noisy = y_train + rng.normal(loc=0.0, scale=noise_std, size=y_train.shape)

gaussian_process = GaussianProcessRegressor(
    kernel=kernel, alpha=noise_std**2, n_restarts_optimizer=9
)
gaussian_process.fit(X_train, y_train_noisy)
mean_prediction, std_prediction = gaussian_process.predict(X, return_std=True)

plt.plot(X, y, label=r"$f(x) = x \sin(x)$", linestyle="dotted")
plt.errorbar(
    X_train,
    y_train_noisy,
    noise_std,
    linestyle="None",
    color="tab:blue",
    marker=".",
    markersize=10,
    label="Beobachtungen",
)
plt.plot(X, mean_prediction, label="Mittlere Vorhersage")
plt.fill_between(
    X.ravel(),
    mean_prediction - 1.96 * std_prediction,
    mean_prediction + 1.96 * std_prediction,
    color="tab:orange",
    alpha=0.5,
    label=r"95%-Konfidenzintervall",
)
plt.legend()
plt.xlabel("$x$")
plt.ylabel("$f(x)$")
_ = plt.title("Gaussian process regression on a noisy dataset")

Zusammenfassung

In diesem Lab haben wir gelernt, wie man die Gaussian Process Regression verwendet, um ein Modell an einen Datensatz anzupassen. Wir haben einen synthetischen Datensatz generiert und die Gaussian Process Regression verwendet, um ein Modell an ihn anzupassen. Wir haben die scikit-learn-Bibliothek verwendet, um die Gaussian Process Regression durchzuführen und die mittleren Vorhersagen und die 95%-Konfidenzintervalle geplottet.