首页 > 解决方案 > 拟合高斯过程的后验样本与预测均值不相似

问题描述

我正在根据此处显示的第二个图拟合高斯过程并从中抽取样本。但是,绘制的样本与拟合函数不相似,并且通常看起来与预测的平均值有很大不同(具体来说,它们没有那么平滑并且有急剧变化)并且不会通过(或接近)给定的数据点(红色图中的点)。

示例图(黑线是预测平均值,蓝色和橙色线是样本): 在此处输入图像描述

经过多次运行,结果总是相似的(即使不完全相同)。有什么想法是什么原因造成的,以及如何使绘制的样本更接近平均值?

用于生成绘图的代码是

import numpy as np

from matplotlib import pyplot as plt

from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, WhiteKernel as White


rng = np.random.RandomState(0)
X = rng.uniform(0, 5, 20)[:, np.newaxis]
y = 0.5 * np.sin(3 * X[:, 0]) + rng.normal(0, 0.5, X.shape[0])

kernel = 1.0 * RBF(length_scale=1.0, length_scale_bounds=(1e-2, 1e3)) \
    + White(noise_level=1e-5, noise_level_bounds=(1e-10, 1e+1))
gp = GaussianProcessRegressor(kernel=kernel, alpha=0.0)
gp.fit(X, y)

X_ = np.linspace(0, 5, 100)
y_mean, y_cov = gp.predict(X_[:, np.newaxis], return_cov=True)

plt.figure(figsize=(14,7))
plt.plot(X_, y_mean, 'k', lw=3, zorder=9)
plt.fill_between(X_, y_mean - np.sqrt(np.diag(y_cov)),
                 y_mean + np.sqrt(np.diag(y_cov)),
                 alpha=0.5, color='k')
plt.scatter(X[:, 0], y, c='r', s=50, zorder=10, edgecolors=(0, 0, 0))
plt.title("Initial: %s\nOptimum: %s\nLog-Marginal-Likelihood: %s"
          % (kernel, gp.kernel_, gp.log_marginal_likelihood(gp.kernel_.theta)))
y_samples = gp.sample_y(X_.reshape(-1, 1), 2)
plt.plot(X_, y_samples, lw=2)
plt.tight_layout()

标签: pythonscikit-learngaussian-process

解决方案


我最近一直在学习GP流程,并尝试设置一个直观的解释

背景:

要学习的真正(玩具)函数是正弦函数:(0.5 * sine x)+ 正态分布调整(均值=0,SD = 0.5)

Gaussian Process Regressor 尝试学习和拟合(基于一些给定的学习对 (X, y) / 先验分布)并连续到达某个后验分布。给定的学习点越多,通常预测质量就越好。

当前代码和演示

GP 回归器将尝试给出预测均值 + 置信范围(例如。在这种情况下为一个 SD)。在这个给定的正弦相关函数的情况下,它的真实形状通常像我的第三个附件给出的红线(注意由 100 个测试点构建的红线有时可能与其他的有很大偏差,部分原因是随机正常调整到正弦方程。

我附加三个案例 i)80 个先前学习点和 ii)10 个先前学习点,iii)具有 100 X 输入的真实后验函数图,以与当前 20 个点的情况进行比较(请注意 10 个学习点图显示在某些区域过拟合,在其他区域欠拟合)

80个学习点

10个学习点

[真正的功能与学习3 我们应该从 gp.sample_y 给出的样本中得到什么?

我们的预测应主要由预测均值(黑色)和置信水平(灰色)指导。您从 sample_y 中采样的是该过程的“众多”实现。直观上,这就像您在 T 时间段内掷 N 个面的骰子,并且您可以进一步细分 T 和细分 N,这成为不定式组合。即使我们保留一个范围并保留所有整数,它仍然是可能的子分布(样本)的巨大组合。

因此,无论是在先验分布还是后验分布中,i)这些样本肯定不如聚合样本平滑(就像任何单个游戏一样)并且 ii)它们中的许多每个的行为都彼此不同,但 iii)它们总体上形成一定的高斯模式。

在我有限的理解范围内,样本只是许多可能发生的事情,而且大多数情况下,结果在置信范围内或接近置信范围,并且预测通常由预测均值(黑线)指导

参考:https ://peterroelants.github.io/posts/gaussian-process-tutorial/


推荐阅读