我创建了高斯过程模型并使用噪声目标进行训练。我根据最后一个scikit-learn 18的文档将噪声实现为参数alpha [n_samples]。
model = GaussianProcessRegressor(kernel=kernel,n_restarts_optimizer=0, alpha=dy_train ** 2)
直到我想执行交叉验证才有效。它引发了一个错误,即alpha参数和实际目标的长度不相等:
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)
我理解错误,但我不知道如何正确定义alpha矢量以进行交叉验证。请问有什么建议吗?
由于
答案 0 :(得分:0)
Alpha应该是一个数字(它可以很好地处理您的代码)。您也可以使用每个样本的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)