Introducción
En este laboratorio, aprenderemos a usar la regresión con procesos gaussianos para ajustar un modelo a un conjunto de datos. Generaremos un conjunto de datos sintético y usaremos la regresión con procesos gaussianos para ajustar un modelo a él. Usaremos la librería scikit-learn para realizar la regresión con procesos gaussianos.
Consejos sobre la VM
Una vez que se haya iniciado la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.
A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.
Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.
Generación del conjunto de datos
Generaremos un conjunto de datos sintético. El verdadero proceso generativo está definido como 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")
Objetivo sin ruido
En este paso, usaremos el verdadero proceso generativo sin agregar ningún ruido. Para entrenar la regresión con procesos gaussianos, solo seleccionaremos algunas muestras.
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_
Predicciones e intervalos de confianza
Después de ajustar nuestro modelo, vemos que los hiperparámetros del kernel han sido optimizados. Ahora, usaremos nuestro kernel para calcular la predicción media del conjunto de datos completo y graficar el intervalo de confianza del 95%.
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="Observaciones")
plt.plot(X, mean_prediction, label="Predicción media")
plt.fill_between(
X.ravel(),
mean_prediction - 1.96 * std_prediction,
mean_prediction + 1.96 * std_prediction,
alpha=0.5,
label=r"Intervalo de confianza del 95%",
)
plt.legend()
plt.xlabel("$x$")
plt.ylabel("$f(x)$")
_ = plt.title("Regresión con procesos gaussianos en conjunto de datos sin ruido")
Objetivos con ruido
Podemos repetir un experimento similar agregando un ruido adicional al objetivo esta vez. Esto permitirá ver el efecto del ruido en el modelo ajustado.
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="Observaciones",
)
plt.plot(X, mean_prediction, label="Predicción media")
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"Intervalo de confianza del 95%",
)
plt.legend()
plt.xlabel("$x$")
plt.ylabel("$f(x)$")
_ = plt.title("Regresión con procesos gaussianos en un conjunto de datos con ruido")
Resumen
En este laboratorio, aprendimos cómo usar la regresión con procesos gaussianos para ajustar un modelo a un conjunto de datos. Generamos un conjunto de datos sintético y usamos la regresión con procesos gaussianos para ajustar un modelo a él. Usamos la biblioteca scikit-learn para realizar la regresión con procesos gaussianos y graficamos las predicciones medias y los intervalos de confianza del 95%.