David Kofoed Wind 在 Kaggle 博客 No Free Hunch 上发表了一篇文章,标题为《向最佳学习》。在文章中,David 总结了与参与和在竞争性机器学习中取得好成绩相关的 6 个关键领域,并引用了顶级 Kaggle 参赛者的话。
在本文中,您将发现从该文章中提炼出的在竞争性机器学习中取得好成绩的关键启发式方法。

向最佳学习
照片由 Lida 拍摄,保留部分权利
学习 Kaggle 大师
David 是丹麦技术大学认知系统系的博士生。在此之前,他是硕士生,他的论文题目是《预测性机器学习中的概念》。
从标题中您就能知道,这是一篇很棒的论文。其中,David 提炼了三位 Kaggle 大师 Tim Salimans、Steve Donoho 和 Anil Thomas 的建议,并分析了 10 场比赛的结果,形成了一个在 Kaggle 竞赛中表现良好的方法,然后通过参加 2 场案例研究竞赛来检验这些经验。
他的框架包含 5 个组成部分
- 特征工程是预测性机器学习中最重要的部分
- 过度拟合排行榜是一个真实存在的问题
- 简单的模型可以让你走得很远
- 集成是获胜策略
- 预测正确的事很重要
David 在他的博客文章中总结了这五个领域,并增加了第六个不适合分类的通用建议。
预测建模竞赛框架
在本节中,我们将研究框架的每个部分的关键课程以及需要考虑的其他启发式方法。
特征工程
特征工程是数据准备步骤,涉及属性的转换、聚合和分解,形成最能表征数据结构以用于建模问题的特征。
- 数据比你应用的算法更重要。
- 将大部分时间花在特征工程上。
- 利用自动方法生成、提取、删除和修改属性。
- 深度学习中使用的半监督学习方法可以自动建模特征。
- 有时,对数据集进行仔细的反范式化可以胜过复杂的特征工程。
过拟合
过拟合是指创建在训练数据上表现良好,但在未见过的测试数据上表现不佳(或相差甚远)的模型。这也延伸到排行榜上观察到的分数,这是对模型在用于识别竞赛获胜者的样本验证数据集(通常约占 20%)上的评估。
- 小型且嘈杂的训练数据集可能导致排行榜和最终结果之间出现更大的不匹配。
- 排行榜确实包含信息,可用于模型选择和超参数调整。
- Kaggle 使过拟合的危险变得非常真实。
- 花大量时间在你的测试装置上估计模型准确性,甚至可以忽略排行榜。
- 将测试装置分数与排行榜分数进行关联,以评估您对排行榜的信任程度。
简单模型
使用简单模型是指使用经典或易于理解的算法处理数据集,而不是通常更复杂的最新方法。模型的简单性或复杂性是指优化这些项所需的项数和过程。
- 最佳参赛者通常使用更简单的方法。
- 初学者过早转向复杂模型,这会减慢在问题上的学习速度。
- 简单模型训练速度更快,更易于理解和适应,从而提供更多见解。
- 简单模型迫使您首先处理数据,而不是调整参数。
- 简单模型可能是基准的重现,例如按细分市场的平均响应。
集成方法
集成是指将多个模型的预测组合成一组预测,通常是根据每个贡献模型的技能(例如在公共排行榜上)进行加权的混合。
- 大多数获奖模型是多个模型的集成。
- 对高度调整的模型以及中等模型的集成可以取得良好结果。
- 组合以不同方式约束的模型可以带来更好的结果。
- 在考虑集成之前,要充分利用算法。
- 在竞赛结束前,将集成作为最后一步进行调查。
预测正确的事
每场比赛都有指定的模型评估函数,用于将模型的预测与实际值进行比较。这可以定义损失函数和数据集的结构,但不一定如此。
- 头脑风暴多种数据可用于建模问题的方法。
- 例如,根据预期的飞行时间比来建模航班着陆时间与总飞行时间。
- 探索使用不同损失函数(例如 RMSE vs MAE)准备模型。
附加建议
本节列出了 David 和他的受访者关于在竞争性机器学习中取得好成绩的更多见解。
- 尽快获得排行榜上的排名
- 构建一个加载数据并可靠评估模型的管道,这几乎比您想象的更难。
- 拥有一个包含大量工具的工具箱,并知道何时以及如何使用它们。
- 充分利用论坛,既要给予也要索取。
- 在您知道自己能从数据集中获得最大收益后,再优化模型参数。
- 竞赛的胜利不是靠一个洞察力,而是靠几个连续的洞察力。
总结
在本篇文章中,您了解了参与竞争性机器学习的 5 个关注点框架:特征工程、过拟合、简单模型的使用、集成和预测正确的事。
在本文中,我们回顾了 David 的框架以及一些关键的经验法则,这些法则可用于在参加 Kaggle 竞赛时从数据和算法中获得最大收益。
感谢又一篇精彩的博文!
有一点,我不太理解“简单模型”下的最后一点。我认为可能只是一个小小的语法错误,我无法弄清楚。如果您能澄清一下,我将不胜感激。
谢谢 Toby。
是的,我已经修正了最后一点的措辞。一个流行的简单模型的例子是平均响应或按细分市场的平均响应。
刚发现您的博客,非常喜欢所有这些文章——谢谢!
虽然我不理解“预测正确的事”部分中的这一点
“例如,根据预期的飞行时间比来建模航班着陆时间与总飞行时间。”
谢谢!
那是针对一个特定项目的,您可以忽略它,获取更通用的建议。