我正在使用scikit Learn的高斯过程(GP)工具进行贝叶斯优化。我注意到一种奇怪的趋势不断影响着我的结果。当我输入以下代码以将GP适配到一个数据点
import numpy as np
import sklearn.gaussian_process as gp
#domain
x = np.linspace(-3,3,10).reshape(-1,1)
#create gaussian process
kernel = gp.kernels.Matern()
model = gp.GaussianProcessRegressor(kernel=kernel,
alpha=1e-5,
n_restarts_optimizer=10,
normalize_y=True)
#fit to first data point
model.fit(np.array([[0.72]]), np.array([[-0.665]]))
#precict mean, standard deviaion over domain
mu, std = model.predict(x, return_std=True)
print std
我得到一个很好的标准偏差,该偏差在x = 0.72的采样点附近减小:
[0.99992986 0.99949578 0.99661166 0.97932637 0.89018143 0.51921629 0.40500728 0.8588613 0.97270708 0.99544088]
但是,我然后为第二个数据点实现了相同的GP,如下所示:
#fit to first and second data point
model.fit(np.array([[0.72],[-2.99]]), np.array([[-0.665],[0.2168]]))
#precict mean, standard deviaion over domain
mu, std = model.predict(x, return_std=True)
print std
并收到一个看起来很奇怪的向量,该向量在第一点仅低于1
[0.7028552 1. 1. 1. 1. 1. 1。 1. 1. 1.]
这当然不可能成立,因为我们仍然对最初的观点有信心。当我包含第三个点时,标准偏差再次看起来很正常,但是,第二个点中的这种奇怪现象导致我的优化例程出现问题,并且我不明白为什么会出现它。