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%)的主要内容,如果未能解决你的问题,请参考以下文章