我正在参加几个机器学习比赛,因为我正在努力学习这个领域。
对于回归问题,我使用xgboost
。
这是我使用的程序:
在特征工程之后,我像往常一样将数据分成2组,一组训练集和一组测试集。然后我将xgboost
放在训练集上并验证测试集。以下是我得到的结果:(当我使用经过训练的算法预测提交目标时,我也会显示公共集结果,度量标准为mae)。
Iteration training score testing score public score
100 8.05 12.14 17.50
150 7.10 11.96 17.30
备注:
所有数据集(火车/测试/公共场景)的大小大致相同,约为200 000个样本。
这是一个时间序列,所以我在拆分时没有对数据进行洗牌,即使改组它也不会改变结果。
我还尝试在临时与公共数据集接近的样本上训练我的xgboost,但结果并不好。
在我提交之前对所有数据(火车+测试)进行培训时,我的公共评分为0.35。
以下是我的问题:
我们是否可以通过观察训练和测试分数之间的差异来真正估计过度拟合?或者它只是过度拟合的指标?
为什么通过增加迭代次数来提高我的提交分数,即使它表明我越来越过度拟合?
为什么提交分数的改善甚至优于测试分数的改善?
为什么测试分数和提交分数不会更接近?为什么我在测试和提交分数之间存在系统性差异,无论超参数或过度拟合率如何"
这句话是否成立:如果学到的有用信息与无用信息(训练集特定信息)之比大于1,那么你可以继续过度拟合并仍然改进模型吗?
我希望它不会太混乱,对不起,我可能没有合适的词汇。 我不得不提一下,即使是过度拟合以及测试和公共分数之间的巨大差异,我仍然是排名第二的人,有50人参与。
答案 0 :(得分:4)
首先要了解过度拟合是什么。
当你的测试组得分在下降(或者错误在增加)时,当训练分数增加(或者误差正在减少)时,你可以看到过度适合
过度拟合是指您的训练模型过于精确,并且没有概括您尝试解决的问题。换句话说,它对培训和培训的影响太大,因此无法解决/预测不同的数据集。
在你的例子中,似乎火车和测试的错误都在减少,这意味着你没有过度适应。
过度拟合总是糟糕的事情。
至于你目前的问题。如果要运行多个交叉验证,或者手动拆分数据以进行许多培训和许多测试集,您可以执行以下操作:
答案 1 :(得分:3)
只是一些可能对你有帮助的想法......
Kaggle比赛的最终结果是私人排行榜,您的模型将在您尚未看到的数据上进行测试。优化您的模型以在公共排行榜(提交数据集)上进行良好预测,然后因为您过度装配并且没有交叉验证而放弃10个位置是没有用的,因此您的模型没有很好地概括。你必须做一些交叉验证,我建议你相信结果。
请注意,按百分比计算,您的MAE减少幅度分别为11.8%,1.5%和1.1%,因此您的提交分数正在提高。
有时候你必须小心时间序列数据 - 哪部分数据与公共/私人排行榜数据最相似?例如,如果你有一年的数据并且你在1月6月16日进行训练,在7月到12月16日进行测试,然后在1月6月17日验证(提交),那么你可能期望比你提交更好的结果测试数据集。在这种情况下,您可以完全丢弃7月至12月16日的数据,并仅在1月至6月16日进行训练/测试。
如果你在第二位,你显然做得对,但请记得交叉验证。过去有过比赛,因为他们的模型没有很好地概括,所以人们会有数百个地方掉落!
答案 2 :(得分:3)
您的函数将完美地拟合给定数据点,从而导致Xi平方低于1。
进一步了解:https://en.wikipedia.org/wiki/Reduced_chi-squared_statistic
本质上:
P.S检查kaggle排行榜前后赢。他们评估不同的数据子集。大多数领先的算法在“之前未见过”中做得很糟糕。数据