Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Machine learning 过度装修总是一件坏事吗?_Machine Learning_Regression_Xgboost_Kaggle - Fatal编程技术网

Machine learning 过度装修总是一件坏事吗?

Machine learning 过度装修总是一件坏事吗?,machine-learning,regression,xgboost,kaggle,Machine Learning,Regression,Xgboost,Kaggle,我目前正在参加几个机器学习比赛,因为我正在努力学习这个领域 对于回归问题,我使用了xgboost。 以下是我使用的程序: 在特征工程之后,我像往常一样将我的数据分成两组,一组训练集和一组测试集。然后,我将我的xgboost放在训练集上,并在测试集上进行验证。以下是我得到的结果:(当我使用经过训练的算法预测提交的目标时,我还显示了公共集结果,度量是mae) 备注: 所有数据集(列车/测试/公共集)的大小大致相同,大约有200000个样本 这是一个时间序列,所以我在分割时没有洗牌数据,即使洗牌不会

我目前正在参加几个机器学习比赛,因为我正在努力学习这个领域

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

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

备注:

  • 所有数据集(列车/测试/公共集)的大小大致相同,大约有200000个样本

  • 这是一个时间序列,所以我在分割时没有洗牌数据,即使洗牌不会改变结果

  • 我还尝试在暂时接近公共数据集的样本上训练xgboost,但结果并没有更好

  • 当我在提交之前对所有数据(训练+测试)进行训练时,我的公共分数提高了0.35

以下是我的问题:

  • 我们真的可以仅仅通过观察训练和测试分数之间的差异来估计过度拟合吗?或者这仅仅是一个过度装配的指标

  • 为什么我的提交分数会通过增加迭代次数而提高,即使这表明我越来越过度拟合

  • 为什么提交分数的提高甚至比测试分数的提高更好

  • 为什么测试分数和提交分数不接近?为什么无论超参数或“过度拟合率”如何,我在测试和提交分数之间都有很大的系统差异

这句话是真的吗:如果学习到的有用信息与无用信息(训练集特定信息)的比率大于1,那么您可以继续过度拟合并仍然改进模型

我希望不要太混乱,很抱歉我可能没有合适的词汇。
我必须提到的是,即使过度拟合以及测试和公开评分之间的巨大差异,我目前仍然是排行榜上的第二名,有50人参与

首先,了解什么是过度拟合

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

过度拟合是指你的训练模型过于精确,不能概括你试图解决的问题。换言之,它太适合于训练和单独的训练,因此它无法解决/预测不同的数据集

在您的示例中,列车和测试的误差似乎都在减少,这意味着您没有过度拟合

过度装修总是一件坏事

至于你目前的问题。如果要运行多个交叉验证,或手动拆分多个培训和多个测试集的数据,可以执行以下操作:

  • 将数据拆分为培训和测试数据(50%,50%)或(70%,30%),您认为适合您的数据
  • 然后,随机抽取X%的训练数据作为训练集
  • 用Y%随机抽样测试数据,它将成为您的测试集
  • 我建议X=Y=75%。上述分类为70%的培训和30%的测试
  • 关于你的问题:

  • 这只是一个过度适合的指标
  • 以你的例子来说,你并不过分合适
  • 分数在不同的数据集上会有所不同
  • 答案和3相同
  • 添加图片以描述过盈:


    在复杂性中有一点(10),持续训练会减少训练错误,但会增加测试错误。

    一些想法可能会帮助你

    Kaggle竞赛的最终结果是私人排行榜,您的模型将在您尚未看到的数据上进行测试。优化您的模型以在公共排行榜(提交数据集)上预测好,然后因为拟合过度且没有交叉验证而下降10位是没有用的,因此您的模型没有很好的通用性。你必须做一些交叉验证,我建议你相信结果

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

    有时,您必须小心处理时间序列数据–数据的哪一部分与公共/私人排行榜数据最为相似?例如,如果您有一年的数据,并且您在1月至6月16日进行培训,在7月至12月16日进行测试,然后在1月至6月17日进行验证(提交),那么您可能期望提交的结果比测试数据集的结果更好。在这种情况下,您可能会完全丢弃7月至12月16日的数据,只在1月至6月16日进行训练/测试


    如果你排在第二位,显然你做得对,但请记住交叉验证。在过去的比赛中,由于他们的模型没有很好的通用性,人们跌了数百个位置

    查看此图像,尝试拟合数据点:

    你的函数将完全符合给定的数据点,导致席的平方比低于1。

    进一步见:

    实质上:

    • 你的模型不能概括
    • 在测试集上工作良好

    请在获胜前后检查kaggle leader董事会。它们根据不同的数据子集进行评估。大多数领先的算法在“以前从未见过”的数据上表现不佳。

    谢谢您的回答。但是,如果我不是过度拟合,那么火车和测试成绩之间的区别是什么呢?让我们考虑下面的例子:(迭代,火车得分,测试分数):(50,15,15),(100,14,14.30),在这种情况下,从50到100迭代,火车得分增加1,但是测试分数仅增加。
    Iteration  training score  testing score  public score   
    100        8.05            12.14          17.50
    150        7.10            11.96          17.30