我是否要给cross_val_score()整个数据集还是只给训练集?

时间:2018-09-09 22:39:33

标签: python machine-learning scikit-learn cross-validation

由于该类的文档不是很清楚。我不明白我给它带来了什么价值。

  

cross_val_score(estimator,X,y = None)

这是我的代码:

clf = LinearSVC(random_state=seed, **params)
cvscore = cross_val_score(clf, features, labels)

我不确定这是否正确,或者我是否需要提供X_train和y_train而不是功能和标签。

谢谢

2 个答案:

答案 0 :(得分:4)

即使使用cross_val_score时,分离测试集和训练集也是一个好主意。其背后的原因是知识泄漏。基本上,这意味着当您同时使用训练集和测试集时,会将信息从测试集泄漏到模型中,从而使模型带有偏见,从而导致错误的预测。

blog post上详细介绍了同一问题。

参考文献:

答案 1 :(得分:2)

我假设您是在参考以下文档: http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.cross_val_score.html

交叉验证的目的是确保您的模型没有特别高的方差,从而导致一个实例拟合良好,而另一个实例拟合不良。通常在模型验证中使用。考虑到这一点,您应该传递训练集(X_train,y_train)并查看模型的性能。

您的问题集中在: “我可以将整个数据集传递给交叉验证吗?”

答案是,是的。这是有条件的,取决于您是否对ML输出感到满意。举例来说,我有以下内容: ROC Curve 我使用了随机森林模型,并对整体模型的拟合度和得分感到满意​​。

在这种情况下,我有一个保留设置。 一旦删除此保留集并为模型提供整个数据集,当我为模型提供更多信息时,我们将得到一个得分更高的图(因此,您的简历分数也会反过来更高)。

调用方法的示例可能是这样的: probablistic_scores = cross_val_score(模型,X_train,y_train,cv = 5)

通常首选5折交叉验证。 如果您希望高于5倍-请注意,随着您的“ n”倍数增加,所需的计算资源数量也将增加,并且处理时间将更长。