噪声数据集上的高斯过程回归

20、噪声数据集上的高斯过程回归

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.rcParams['font.sans-serif'] = ['SimHei']

plt.rcParams['axes.unicode_minus'] = False

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)

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

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="观察值",

)

plt.plot(X, mean_prediction, label="均值预测")

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% 置信区间",

)

plt.legend()

plt.xlabel("$x$")

plt.ylabel("$f(x)$")

_ = plt.title("噪声数据集上的高斯过程回归")


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容