我正在使用sklearn使高斯过程适合数据。
在这个简化的示例中,我使用带有RBF内核的简单噪声正弦数据
import numpy as np
import matplotlib.pyplot as plt
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel
X = np.random.uniform(-3.,3.,(200,1))
Y = np.sin(X) + np.random.randn(200,1)*0.05
kernel = RBF(length_scale=1)
gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=9)
gp.fit(X,Y)
x = np.linspace(-3, 3, 100)
y_pred, sigma = gp.predict(x.reshape(-1, 1), return_std=True)
plt.scatter(X,Y, c='r')
plt.plot(x, y_pred)
这将导致对于相对琐碎的正弦曲线的拟合非常不平滑。无论RBF length_scale
参数或n_restarts_optimizer
根据sklearn RBF文档,具有该内核作为协方差函数的GP具有所有阶数的均方导数,因此非常平滑。有什么想法为什么平均预测在这里如此不稳定?
编辑:图像嵌入似乎无效:这是绘制的输出https://imgur.com/kIE9hOT