Einführung
In diesem Lab wird gezeigt, wie man Bayesian Ridge Regression verwendet, um eine polynomiale Kurve an sinusförmige Daten anzupassen. Wir werden sinusförmige Daten mit Rauschen erzeugen, sie mit einem kubischen Polynom anpassen und die wahren und vorhergesagten Kurven mit der logarithmischen marginalen Wahrscheinlichkeit (L) dieser Modelle plotten. Dadurch können wir bestimmen, welches Modell besser ist.
Tipps für die VM
Nachdem die VM gestartet 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.
Erzeugen von sinusförmigen Daten mit Rauschen
Wir beginnen mit dem Erzeugen von sinusförmigen Daten mit Rauschen.
import numpy as np
def func(x):
return np.sin(2 * np.pi * x)
size = 25
rng = np.random.RandomState(1234)
x_train = rng.uniform(0.0, 1.0, size)
y_train = func(x_train) + rng.normal(scale=0.1, size=size)
x_test = np.linspace(0.0, 1.0, 100)
Anpassen mit kubischem Polynom
Wir passen die Daten mit einem kubischen Polynom an.
from sklearn.linear_model import BayesianRidge
n_order = 3
X_train = np.vander(x_train, n_order + 1, increasing=True)
X_test = np.vander(x_test, n_order + 1, increasing=True)
reg = BayesianRidge(tol=1e-6, fit_intercept=False, compute_score=True)
Plotten der wahren und vorhergesagten Kurven mit logarithmischer marginaler Wahrscheinlichkeit (L)
Wir plotten die wahren und vorhergesagten Kurven mit logarithmischer marginaler Wahrscheinlichkeit (L).
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 2, figsize=(8, 4))
for i, ax in enumerate(axes):
## Bayesian ridge regression with different initial value pairs
if i == 0:
init = [1 / np.var(y_train), 1.0] ## Default values
elif i == 1:
init = [1.0, 1e-3]
reg.set_params(alpha_init=init[0], lambda_init=init[1])
reg.fit(X_train, y_train)
ymean, ystd = reg.predict(X_test, return_std=True)
ax.plot(x_test, func(x_test), color="blue", label="sin($2\\pi x$)")
ax.scatter(x_train, y_train, s=50, alpha=0.5, label="observation")
ax.plot(x_test, ymean, color="red", label="predict mean")
ax.fill_between(
x_test, ymean - ystd, ymean + ystd, color="pink", alpha=0.5, label="predict std"
)
ax.set_ylim(-1.3, 1.3)
ax.legend()
title = "$\\alpha$_init$={:.2f},\\ \\lambda$_init$={}$".format(init[0], init[1])
if i == 0:
title += " (Default)"
ax.set_title(title, fontsize=12)
text = "$\\alpha={:.1f}$\n$\\lambda={:.3f}$\n$L={:.1f}$".format(
reg.alpha_, reg.lambda_, reg.scores_[-1]
)
ax.text(0.05, -1.0, text, fontsize=12)
plt.tight_layout()
plt.show()
Zusammenfassung
Bayesian Ridge Regression ist eine leistungsstarke Technik zur Kurvenanpassung, die verwendet werden kann, um Daten an eine polynomiale Kurve anzupassen. Indem wir über verschiedene Anfangswerte für die Regularisierungsparameter iterieren, können wir die beste Anpassung für die gegebenen Daten finden.