我在一个小的数据集(下面的示例)中在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)