Ajustar el modelo de regresión con procesos gaussianos

Beginner

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

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%.