split_test_train 和交叉验证之间的分数差异很大 (10%)

Posted

技术标签:

【中文标题】split_test_train 和交叉验证之间的分数差异很大 (10%)【英文标题】:Big difference in score (10%) between a split_test_train and a cross validation 【发布时间】:2020-10-31 02:19:35 【问题描述】:

我遇到了一个分类问题: 2,500 行。 25000 列 88个不同的类分布不均

然后发生了一件非常奇怪的事情:

当我运行十几个不同的拆分测试火车时,我的分数总是在 60% 左右...

当我运行交叉验证时,我总是得到大约 50% 的分数。 屏幕在这里: 此外,这与班级分配不均无关,因为当我在 TTS 上放置一个 stratify=y 时,我保持在 60% 左右,而当我放置一个 StratifiedKFold 时,我保持在 50% 左右。

要记住哪个分数?为什么有区别?对我来说,一份 CV 只是一系列不同的测试火车分割,所以没有任何理由可以证明这样的分数差异。

【问题讨论】:

重新阅读 How to ask,因为您第一次阅读时似乎错过了一些关键点,即“DO NOT发布代码、数据、错误消息等的图像。 - 将文本复制或输入到问题中”(强调原文)。看看为什么an image of your code is not helpful。 【参考方案1】:

简短回答:将 shuffle=True 添加到您的 KFold : cross_val_score(森林,X,y,cv=KFold(shuffle=True))

长答案:连续的 TrainTestSplit 和使用经典 KFold 的交叉验证之间的区别在于,在训练集和测试集之间分割之前 TTS 中存在混合。 分数的差异可能是由于您的数据集以有偏差的方式排序。 因此,只需将 shuffle=True 添加到您的 KFold(或您的 StratifiedKFold,这就是您需要做的全部)。

【讨论】:

【参考方案2】:

第一个代码示例返回 5 个值,然后您学习 4/5 的数据并在 1/5 上有效。 第二个样本5/6学习,1/6有效,效果更好。

也许你可以试试for k in range(5)看看你的分数是否还有很大的差异?

【讨论】:

以上是关于split_test_train 和交叉验证之间的分数差异很大 (10%)的主要内容,如果未能解决你的问题,请参考以下文章

SVM 回归的交叉验证

R: Kriging interpolation and cross validation 克里金插值及交叉验证浅析

交叉验证

如何对目录中的 keras 图像数据集使用交叉验证?

如何在不同的数据帧上生成交叉验证以进行监督分类?

Scikit Learn 分层交叉验证中的差异