我让他跟随代码在SkLearn中运行10倍交叉验证:
cv = model_selection.KFold(n_splits=10, shuffle=True, random_state=0)
scores = model_selection.cross_val_score(MyEstimator(), x_data, y_data, cv=cv, scoring='mean_squared_error') * -1
出于调试目的,当我尝试使MyEstimator工作时,我想只运行这个交叉验证的一个折叠,而不是全部10.有一个简单的方法来保留这些代码,但只是说运行先折叠然后退出?
我仍然希望将这些数据分成10个部分,但只有10个部分的一个组合适合并得分,而不是10个组合。
答案 0 :(得分:1)
不,我认为不是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将仅在内部执行此操作,只是对并行处理进行一些增强。