我想计算回归模型建立与使用交叉验证和感到困惑,这两个功能scikitlearn cross_val_score和cross_val_predict我应该使用.一种选择是:
cvs = DecisionTreeRegressor(max_depth = depth)
scores = cross_val_score(cvs, predictors, target, cv=cvfolds, scoring='r2')
print("R2-Score: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))
Run Code Online (Sandbox Code Playgroud)
另一个,使用标准的cv预测r2_score:
cvp = DecisionTreeRegressor(max_depth = depth)
predictions = cross_val_predict(cvp, predictors, target, cv=cvfolds)
print ("CV R^2-Score: {}".format(r2_score(df[target], predictions_cv)))
Run Code Online (Sandbox Code Playgroud)
我认为这两种方法都是有效的,并给出类似的结果.但这只是小k倍的情况.虽然r ^ 2对于10倍-cv大致相同,但是对于使用"cross_vall_score"的第一版本的情况,对于更高的k值,它变得越来越低.第二个版本大多不受折叠次数变化的影响.
这种行为是否可以预期,我是否对SKLearn中的CV缺乏了解?
python regression machine-learning scikit-learn cross-validation