过度拟合总是一件坏事吗?

Is overfitting always a bad thing?

我目前正在参加几个机器学习竞赛,因为我正在尝试学习这个领域。

对于回归问题,我使用 xgboost。 这是我使用的程序:

在特征工程之后,我像往常一样将我的数据分成 2 组,一组训练集和一组测试集。然后我将 xgboost 拟合到训练集上并在测试集上进行验证。这是我得到的结果:(我还显示了 public 集结果,当我使用经过训练的算法来预测提交目标时,指标是 mae)。

Iteration  training score  testing score  public score   
100        8.05            12.14          17.50
150        7.10            11.96          17.30

备注:

这是我的问题:

这个说法是否正确:如果学到的有用信息与无用信息(训练集特定信息)的比率大于 1,那么您可以继续过度拟合并仍然改进模型?

我希望它不会太混乱,很抱歉我可能没有正确的词汇。 不得不提的是,即使有过拟合和测试与 public 分数的巨大差异,我目前仍然是 50 人参与的排行榜第二名。

首先要明白over-fitting是什么

当训练分数增加(或错误减少)而你的测试集分数减少(或错误增加)时,你可以看到过拟合

过拟合是指您的训练模型过于精确,无法概括您尝试解决的问题。换句话说,它对于训练来说太适合了,而且单独训练,所以它不能 solve/predict 不同的数据集。

在你的例子中,火车和测试的错误似乎都在减少,这意味着你没有过拟合。

过度拟合总是不好的事情。

关于你现在的问题。如果你想 运行 多重交叉验证,或手动拆分你的数据用于许多训练和许多测试集,你可以执行以下操作:

  1. 将训练和测试数据拆分为(50%、50%)或(70%、30%),您认为适合您的方式
  2. 然后,从你的训练数据中随机抽取X%作为训练集。
  3. 测试数据随机抽取Y%作为测试集
  4. 我建议 X = Y = 75%。上面的分割是 70% 的训练和 30% 的测试。

关于您的问题:

  1. 它只是过拟合的一个指标。
  2. 你的例子并没有过度拟合
  3. 不同数据集的分数会有所不同
  4. 与 3 相同的答案

添加图片描述过拟合:

在复杂度中有一个点 (10),继续训练会减少训练误差,但会增加测试误差。

一些可能对您有帮助的想法...

Kaggle 比赛的最终结果是私人排行榜,您的模型将在您尚未见过的数据上进行测试。优化您的模型以在 public 排行榜(提交数据集)上进行良好预测然后下降 10 个位置是没有用的,因为您过度拟合并且没有 cross-validate,所以您的模型没有很好地泛化。你必须做一些 cross-validation,我建议你相信结果。

请注意,按百分比计算,您的 MAE 下降了 11.8%、1.5% 和 1.1%,因此您的提交分数提高最少。

有时你必须小心处理时间序列数据——数据的哪一部分与 public/private 排行榜数据最相似?例如,如果你有一年的数据,你在 Jan-Jun 16 上训练,在 Jul-Dec 16 上测试,然后在 Jan-Jun 17 上验证(提交),那么你可能会期望更好您提交的结果比您测试数据集。在这种情况下,您可能会完全丢弃 Jul-Dec 16 条数据,而 train/test 仅丢弃 Jan-Jun 16.

如果你排在第二位,你显然做对了,但请记住cross-validate。过去有比赛,人们因为他们的模型没有很好地泛化而掉了几百个名次!

查看这张试图拟合数据点的图片:

您的函数将完美拟合给定数据点,导致 Xi 平方小于 1。

进一步查看:https://en.wikipedia.org/wiki/Reduced_chi-squared_statistic

本质上:

  • 你的模型不会泛化
  • 在测试集上表现良好

P.S 检查 kaggle 排行榜,post 获胜。他们评估不同的数据子集。大多数领先的算法在 'not seen before' 数据上表现不佳。