训练集的交叉验证分数高,测试集的分数高,但 Kaggle 的分数低?

数据挖掘 机器学习 Python 随机森林 交叉验证 机器学习模型
2022-03-06 04:32:11

我一直在尝试在 Kaggle 上完成这个回归任务。像往常一样,他们提供了一个 train.csv(带有响应变量)和一个 test.csv(没有响应变量)文件,分别供我们训练模型和计算我们的预测。

我进一步将 train.csv 文件拆分为 train_set 和 test_set。我使用这个后续的 train_set 来训练一个模型列表,然后我将仅基于 10 倍交叉验证分数 (RMSLE) 和超参数调整后将其列入一个模型。现在我有一个最好的模型,它是随机森林(具有最佳超参数),平均 RMSLE 得分为 0.55。在这一点上,我还没有触及 test_set。

因此,当我在 train_set 数据上训练相同的精确模型,但在 test_set 上评估其结果时(为了避免过度拟合我调整过的超参数),它会产生 0.54 的 RMSLE 分数。这是我开始怀疑的时候,因为我在 test_set 上的分数略好于 train_set 的平均分数(test_set 结果应该稍微差一点,因为模型没有看到 test_set 数据,对吧?)。

最后,我继续使用相同的模型但使用 test.csv 文件(没有响应变量)提交我的结果。但后来 Kaggle 给了我 0.77 的 RMSLE 分数,这比我的交叉验证分数和我的 test_set 分数差很多!

我对为什么会发生这种情况感到非常沮丧和困惑,因为我相信我已经采取了一切措施来预测我的模型会过度拟合。请给出详细而简单的解释,我还是初学者,所以我可能不太了解技术术语。

2个回答

您命名为 train_set 和 test_set 的这种“火车拆分”不能保证是干净的,甚至是平衡的。

当您的测试集比您的训练集具有更好的性能时,这可能意味着您有数据泄漏(测试集中的一些示例等于训练集)或者只是意味着您的测试集比训练集稍微容易一些。

他们想测试你的概括能力。

测试(坚持/排行榜)集总是会有一些不同的分布(即协变偏移​​),因此你经常有一个排行榜改组。人们也经常尝试探索测试集以了解此分布并相应地调整模型。