3

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

cross_val_score(估计器,X,y=None)

这是我的代码:

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

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

谢谢

4

2 回答 2

7

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

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

参考:

于 2018-09-09T23:02:23.457 回答
4

我假设您指的是以下文档: 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”倍增加,所需的计算资源数量也会增加,并且需要更长的处理时间。

于 2018-09-09T22:51:07.493 回答