这是过度拟合还是其他什么?

数据挖掘 xgboost 交叉验证 过拟合 卡格尔
2022-02-20 05:39:45

我最近为初学者的房价 Kaggle 比赛整理了一个条目。我决定尝试理解和使用 XGBoost。

我将 Kaggle 的“训练”数据分为“训练”和“测试”。然后我使用 KFold CV 在新的训练数据上拟合和调整我的模型,并cross_val_score使用带有 shuffle 的 KFold 获得了 scikit 的分数。

使用此交叉验证的训练集的平均得分为 0.0168(均方对数误差)。

接下来,使用完全调优的模型,我在从未见过的“测试”集(不是 Kaggle 排行榜的最终测试集)上检查它的性能。四舍五入后得分相同。

所以,我拍拍自己的后背,因为我避免了过度拟合……或者我是这么认为的。当我提交给比赛时,我的分数变成了 0.1359,这是一个巨大的性能下降。这相当于我的房价预测出现了 25 个大错误。

如果不是过度拟合,可能是什么原因造成的?

这是我的笔记本的链接,如果有帮助的话:https ://www.kaggle.com/wesleyneill/house-prices-walk-through-with-xgboost

2个回答

我不是一个狂热的 Kaggler,但我确实记得一个案例,其中与时间相关的数据的评估是随机挑选的(这有利于最近邻方法,因为可能存在精确的重复项)。

不知道这次的评价数据是否有线索(或许你能看出来)。但是可能的过度拟合可能与时间有关。

如果测试集只是测试/训练部分的随机子样本,而评估部分不是随机抽样的,但例如 2011 年的保留,您仍然可以学习特定于时间维度的规则,而不是在测试。

一种可能的解决方法是相应地重新采样测试集。

您已经很好地遵循了正确的流程。(嗯,可能存在错误,比如没有随机抽样测试集。)

我认为问题只是你仍然过拟合。由于偶然的原因,Kaggle 保留的测试集可能不像提供的训练数据那样。除了在您的选择过程中偏爱低方差模型而不是低偏差模型之外,您无能为力。