Introduction
Ce laboratoire montre comment utiliser la régression de Ridge bayésienne pour ajuster une courbe polynomiale à des données sinusoidales. Nous allons générer des données sinusoidales avec du bruit, les ajuster à l'aide d'un polynôme cubique et tracer les courbes réelles et prédites avec la vraisemblance marginale logarithmique (L) de ces modèles. Nous pouvons déterminer lequel est meilleur.
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 Carnet de notes pour accéder au carnet Jupyter pour pratiquer.
Parfois, vous devrez peut-être attendre quelques secondes pour que le carnet Jupyter ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations du carnet Jupyter.
Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez des commentaires après la session, et nous résoudrons rapidement le problème pour vous.
Générer des données sinusoidales avec du bruit
Nous commençons par générer des données sinusoidales avec du bruit.
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)
Ajustement par polynôme cubique
Nous ajustons les données à l'aide d'un polynôme cubique.
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)
Tracer les courbes réelles et prédites avec la vraisemblance marginale logarithmique (L)
Nous traçons les courbes réelles et prédites avec la vraisemblance marginale logarithmique (L).
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 2, figsize=(8, 4))
for i, ax in enumerate(axes):
## Régression de Ridge bayésienne avec différents couples de valeurs initiales
if i == 0:
init = [1 / np.var(y_train), 1.0] ## Valeurs par défaut
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="prédiction moyenne")
ax.fill_between(
x_test, ymean - ystd, ymean + ystd, color="pink", alpha=0.5, label="écart-type de prédiction"
)
ax.set_ylim(-1.3, 1.3)
ax.legend()
title = "$\\alpha$_init$={:.2f},\\ \\lambda$_init$={}$".format(init[0], init[1])
if i == 0:
title += " (Par défaut)"
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()
Sommaire
La régression de Ridge bayésienne est une technique puissante pour l'ajustement de courbes qui peut être utilisée pour ajuster des données à une courbe polynomiale. En itérant sur différentes valeurs initiales pour les paramètres de régularisation, nous pouvons trouver la meilleure ajustement pour les données données.