不,我想不是cross_val_score。您可以将n_splits 设置为最小值 2,但这仍然是火车的 50:50 拆分,测试您可能不想要。
如果您想保持 90:10 的比例并测试代码的其他部分,例如 MyEstimator(),那么您可以使用解决方法。
您可以使用KFold.split() 获取第一组训练和测试索引,然后在第一次迭代后中断循环。
cv = model_selection.KFold(n_splits=10, shuffle=True, random_state=0)
for train_index, test_index in cv.split(x_data):
print("TRAIN:", train_index, "TEST:", test_index)
X_train, X_test = x_data[train_index], x_data[test_index]
y_train, y_test = y_data[train_index], y_data[test_index]
break
现在使用这个 X_train, y_train 来训练估计器,并使用 X_test, y_test 对其进行评分。
而不是:
scores = model_selection.cross_val_score(MyEstimator(),
x_data, y_data,
cv=cv,
scoring='mean_squared_error')
你的代码变成:
myEstimator_fitted = MyEstimator().fit(X_train, y_train)
y_pred = myEstimator_fitted.predict(X_test)
from sklearn.metrics import mean_squared_error
# I am appending to a scores list object, because that will be output of cross_val_score.
scores = []
scores.append(mean_squared_error(y_test, y_pred))
请放心,cross_val_score 只会在内部执行此操作,只是对并行处理进行一些增强。