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

ReR*_*Red 3 python machine-learning scikit-learn cross-validation

由于该类的文档不是很清楚。我不明白我赋予它什么价值。

cross_val_score(估算器,X,y=无)

这是我的代码:

clf = LinearSVC(random_state=seed, **params)
cvscore = cross_val_score(clf, features, labels)
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Moh*_*hif 7

将测试集和训练集分开总是一个好主意,即使在使用 cross_val_score 时也是如此。这背后的原因是知识泄漏。这基本上意味着,当您同时使用训练集和测试集时,您会将测试集中的信息泄漏到模型中,从而使模型有偏差,导致预测不正确。

这是关于同一问题的详细博客文章

参考:

  • 好吧,这令人困惑,基本上你和 azurekirby 说的是相反的...... (2认同)

Iro*_*rby 5

我假设您指的是以下文档: sklearn.model_selection.cross_val_score

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

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

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

在这种情况下,我有一个保留集。一旦我删除了这个保留集并为我的模型提供了整个数据集,我们将得到一个分数更高的图,因为我为我的模型提供了更多信息(因此,您的 CV 分数也会相应更高) 。

调用该方法的示例如下: probablistic_scores = cross_val_score(model, X_train, y_train, cv=5)

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