Scikit学习高斯过程返回2个样本的恒定方差

时间:2019-03-03 20:18:02

标签: python scikit-learn

我正在使用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.]

这当然不可能成立,因为我们仍然对最初的观点有信心。当我包含第三个点时,标准偏差再次看起来很正常,但是,第二个点中的这种奇怪现象导致我的优化例程出现问题,并且我不明白为什么会出现它。

0 个答案:

没有答案