我正在根据此处显示的第二个图拟合高斯过程并从中抽取样本。但是,绘制的样本与拟合函数不相似,并且通常看起来与预测的平均值有很大不同(具体来说,它们没有那么平滑并且有急剧变化)并且不会通过(或接近)给定的数据点(红色图中的点)。
经过多次运行,结果总是相似的(即使不完全相同)。有什么想法是什么原因造成的,以及如何使绘制的样本更接近平均值?
用于生成绘图的代码是
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()