高斯过程回归(sklearn)无法进行非零预测

时间:2018-10-01 03:17:06

标签: python scikit-learn statistics gaussian

我在一个小的数据集(下面的示例)中在sklearn中训练了一个GPR模型。然后,我创建了一个测试数据点的网格,该网格是训练数据的更精细的网格,即,每个预测变量x,y和z具有相同的(x,y,z)边界,但是数据点比最初使用的更多拟合模型。

但是,当我拟合模型时,所有未见数据点都将毫无例外地预测为mu = 0,sigma = 1。为什么是这样?

尽管,当我尝试使用适合该模型且其R ^ 2得分低得多(实际上为负)的其他内核时,看不见的测试点将以非0均值和非1 sigma进行预测。

在此方面提供任何理论上或应用上的帮助,都是有益和有益的。谢谢!

示例训练数据

X data: 
 [[   60  5000  2500]
 [   60  5000  5000]
 [   60  5000  7500]
 [   60  5000 10000]
 [   60  5000 20000]
 [   60  5000 30000]
 [   60 10000  2500]
 [   60 10000  5000]
 [   60 10000  7500]
 [   60 10000 10000]
 [   60 10000 20000]
 [   60 10000 30000]
 [   60 20000  2500]
 [   60 20000  5000]
 [   60 20000  7500]
 [   60 20000 10000]
...]

Y data: 
 [ 0.00527844  0.005325    0.02786722  0.0146621   0.01907119  0.03716826
  0.00734524  0.00327949  0.01763299  0.01652169  0.03677868  0.03038802
  0.02118312  0.01955573  0.01625624  0.01166484  ....]


from sklearn.gaussian_process import GaussianProcessRegressor

######## Fit GPR model 
gpr_mod = GaussianProcessRegressor(n_restarts_optimizer=10, alpha=.5)
gpr = gpr_mod.fit(X, Y)

######## Create test meshgrid dataset
runtime_range = np.arange(60, 360, 30).tolist()
network_range = np.arange(5000, 50000, 5000).tolist() 
operator_range = np.arange(2500, 30000, 2500).tolist()

X_grid = []
for runtime in runtime_range:
    for network in network_range:
        for operator in operator_range:
            big_array.append([runtime, network, operator])


######## Predict on test dataset (which includes points from training dataset)
mu, std = gpr.predict(X_grid, return_std=True) 
print(mu, '\n')
print(std)

0 个答案:

没有答案