Python 拟合高斯过程的后验样本don';t与预测均值相似

Python 拟合高斯过程的后验样本don';t与预测均值相似,python,scikit-learn,gaussian-process,Python,Scikit Learn,Gaussian Process,我根据第二张图拟合高斯过程,并从中提取样本。 然而,绘制的样本与拟合函数不相似,通常与预测的平均值非常不同(具体而言,它们不是平滑的,并且有剧烈的变化),并且不经过(或接近)给定的数据点(图中的红点) 示例图(黑色线为预测平均值,蓝色和橙色线为样本): 多次运行后,结果总是相似的(即使不完全相同)。 你知道是什么原因造成的吗?我怎样才能使抽取的样本更接近平均值 用于生成绘图的代码为 import numpy as np from matplotlib import pyplot as plt

我根据第二张图拟合高斯过程,并从中提取样本。 然而,绘制的样本与拟合函数不相似,通常与预测的平均值非常不同(具体而言,它们不是平滑的,并且有剧烈的变化),并且不经过(或接近)给定的数据点(图中的红点)

示例图(黑色线为预测平均值,蓝色和橙色线为样本):

多次运行后,结果总是相似的(即使不完全相同)。 你知道是什么原因造成的吗?我怎样才能使抽取的样本更接近平均值

用于生成绘图的代码为

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()

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

背景:

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

高斯过程回归器尝试学习和拟合(基于一些给定的学习对(X,y)/先验分布),然后依次得到一些后验分布。随着学习点的增加,预测质量通常越好

当前代码和演示

GP回归器将尝试给出一个预测的平均值+置信范围(例如,在本例中为一个SD)。在给定正弦相关函数的情况下,其真实形状通常类似于我的第三个附件中给出的红线(注:有时由100个测试点构成的红线可能与其他点偏离很多,部分原因是正弦方程的随机正态调整

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

[ 我们应该从gp.sample\u y提供的样本中得到什么?

我们的预测应主要以预测平均值(黑色)和置信水平(灰色)为指导。从样本中抽取的样本是“众多样本中的一个”这一过程的实现。直观上,这就像你在T时间段内掷N张脸的骰子,当你可以进一步细分T和N时,这就变成了无限组合。即使我们保持一个范围并保持所有东西都是整数,它仍然是可能的子分布(样本)的巨大组合

因此,无论是在前向分布还是后向分布中,i)这些样本肯定不如聚合(就像任何单个游戏一样)那么平滑;ii)它们中的许多都表现出彼此不同的行为,但iii)它们聚合起来形成某种高斯模式

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

参考: