2016-10-01 44 views
0

我创建了高斯过程模型并用嘈杂的目标进行训练。我实现了噪声作为一个参数的α[N_SAMPLES次]根据在过去的文档scikit学习18.嘈杂目标的高斯过程的交叉验证错误

model = GaussianProcessRegressor(kernel=kernel,n_restarts_optimizer=0, alpha=dy_train ** 2) 

它工作直到我想执行交叉验证。它提出了一个错误,阿尔法参数和实际目标的长度不等于:

scores = cross_val_score(model, X_test, y_test) 
ValueError: alpha must be a scalar or an array with same number of entries as y.(35 != 10) 

我理解的错误,但我不知道如何正确定义的α向量交叉验证。请提出任何建议?

感谢

回答

0

阿尔法应该是一些(和它的工作只是与您的代码罚款)。您也可以拥有每个样本的alpha值,但这对于.cross_val_score不起作用,因为它不支持内部分片。此外,你正在使用的看起来像一个非常奇怪的启发式来分配alpha。我很确定它不在scikitlearn文档中的任何地方。为了使用交叉验证,您需要使用“完整”方法,该方法通过迭代cross validation iterators并自行平均。这几乎是三行代码,因此不应该是一个很大的负担

from sklearn.model_selection import KFold 
import numpy as np 

kf = KFold(n_splits=10) 
scores = [] 
for train, test in kf.split(X): 
    model.fit(X_train) 
    scores.append(model.score(X_test, y_test)) 
print np.mean(scores) 
+0

谢谢你的解释和代码。这似乎很容易。你是什​​么意思“非常奇怪的启发式”?我将“alpha”参数理解为表示目标数据不确定性的噪声系数。由于每个采样的噪声方差发生变化,因此alpha参数是标准误差的向量。因为我是高斯过程回归和机器学习的初学者,所以对于如何正确模拟输出数据的高斯噪声的建议,我将不胜感激。 –

+0

通过非常奇怪的启发式我的意思是将alpha设置为目标值的平方(您现在通过传递dy_train ** 2) - 为什么要这样做?除非您对数据有深入的了解,并且知道这正是依赖性值的行为方式,否则我不会看到任何意见。它是**正则化**添加到训练中的半定矩阵估计器。是的,这与噪音有关,但这种方式更加复杂,您提供的价值观没有意义。阿尔法应该很小... 1e-3 - 1e-5可能已经是一个很大的价值,你正在添加y ** 2. – lejlot

+0

我明白了,但是在GP模型中实现噪声响应的正确方法是什么? –