来自大神的kaggle经验之谈

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xckkcxxck/article/details/84700453

今天看了一篇采访,采访了现今kaggle比赛第一名:Bestfitting。大神的经验之谈对我很有帮助,特地摘取一部分做记录。原文章:http://www.she9.com/article.php?id=166

Q:在参加新比赛时,你首先会怎么做?

在比赛开始的第一个星期内,我会创建好一个初步的解决方案,随着比赛进行会跟进并更新。要做到这一点,我要先对这个比赛的数据和难点有一定了解,然后研究相似的Kaggle比赛及相关论文。

Q:在比赛中,你会遵循一定的步骤吗?

一般包括以下11部分:

  1.仔细阅读比赛介绍和数据描述;

  2.查找相似的Kaggle比赛。作为一个接触不久的Kaggler,我已经完成对所有Kaggle比赛基本分析的收集;

  3.研究相似比赛的解决方案;

  4.阅读有关论文,以确保不错过该领域的最新进展;

  5.分析数据,并构建可靠的交叉验证结果;

  6.数据预处理、特征工程和模型训练。

  7.结果分析,包括如预测分布、错误分析和困难样本等;

  8.根据分析来改进模型或设计新模型;

  9.基于数据分析和结果分析来设计模型以增加多样性或解决困难样本;

  10.模型集成;

  11.必要时返回到前面的某个步骤。

Q:你最偏向使用哪个机器学习算法?

  我会逐个来筛选算法,但我更喜欢在模型集成时使用一些简单算法,如岭回归(ridge regression)。在深度学习比赛中,我喜欢从resnet-50网络或类似结构来开始尝试。

Q:你的超参数调整策略是什么?

  我会尝试根据对数据性质和算法背后的理论的理解来调整参数。我如果无法解释结果变好或变差的原因,我会觉得这种调整策略不靠谱。

  在深度学习比赛中,我经常去找相关论文,试图找出作者在类似情况下采取的解决技巧。

  而且,我会比较参数更改前后的结果差异,包括预测分布和受影响样本等。

Q:你是如何确定交叉验证方式和最终的提交模型?

  当你确定了一个可靠的交叉验证方式,就已经成功了一大半。如果我找不到一种合适的模型评估方法,我不会去继续下一步。

  为了建立一个可靠的交叉验证方式,你必须对数据和面临的挑战有很好的理解。我也会检查并确保验证集具有与训练集和测试集类似的分布,并尽力确保最终模型在本地验证和排行榜上都有所进步。

        在一些时间序列比赛中,我会留出一部分数据作为验证集。

  通常,我会以一种保守方式来选择最终的提交模型,一直会选择对可靠模型进行加权平均后的集成模型,并确定出其中相对冒险的模型。因为在我看来,参数越多,风险越大。但是,我不会选择某个无法解释的模型,即使它的排行榜得分更高。

Q:你觉得,赢得比赛的关键是什么?

  可靠的验证方式,借鉴其他比赛并阅读相关论文,以及良好的自制力和心理素质。

Q:你认为你最具竞争力的比赛技巧或方法是什么?

  我认为应该是在比赛开始时准备解决方案的文档。我会强迫自己写出一份清单,包括面临的挑战、应该阅读的解决方案和论文、可能的风险、可用的验证方式、可能的数据增强方法以及增加模型多样性的方式。而且,我不断更新这个文档。幸运地,这些文档为我后面在很多比赛中取得不错成绩提供了支持。

Q:你如何看待权衡模型复杂度和模型训练(或测试)时间之间的关系?

我讲下我对这方面的看法:

  1.只有当这方面真正成为短板时,模型的训练(或测试)时间才会受到关注。当模型正确率很重要时,我们不会过多关注模型复杂度。如果你训练某个模型需要几个月的时间,这时我们才会关注和优化这方面内容。

  2.如今,只使用弱模型进行集成,很难赢得比赛。如果你想成为第一名,通常需要构建好几个效果很好的单一模型。当我想确保在比赛中成为第一名时,我会强迫自己去设计不同模型,这些模型在排行榜上能达到前10名,甚至是前3名,组织者可以选择其中任意一个。

  3.按照我的经验,我会在比赛中设计多个模型来探索这个问题的上限,然后从中选择一个在实际应用中可行的简单模型。我总会尽最大努力来向组织者提交一个简单模型,并在经验交流会中和他们进行讨论。我发现,一些组织者会使用我的解决思路和方案来解决他们当前面临的其他问题。

  4.我们还发现,当训练(或测试)运行时间影响比赛时,Kaggle有很多方案来确保模型性能,包括内核比赛、团队规模限制和评估时提供更多未被计算的数据等手段。我相信,Kaggle也会根据挑战目标来制定不同规则。

Q:你是如何在Kaggle比赛中不断进步的?

  有趣的比赛和Kaggle上强大的竞争对手让我不断进步。

  在这里,有很多优秀的参赛者,想要赢得比赛非常困难,他们让我不断进步。去年,我试图尽可能好地完成比赛,我必须去猜其他参赛者的思路。要做到这一点,我必须阅读大量材料并构建出通用模型。在比赛后,我会去了解其他参赛者的解决方案。

Q:你仅用了15个月就很快地上升到了排行榜的第一名,你是怎么做到的?

我想,我从Kaggle平台中受益了很多,也从其他人那里学到了很多,Kaggle上的用户排名系统也激励着我不断进步。我感到非常幸运,因为我从没想过我可以连续获得6个奖项,在许多比赛中取得了前10名或前1%的成绩。我想我很难再重复这个经历了。

  但是,我参加比赛并不是为了冲顶排行榜。我总是把每场比赛都视为一个学习机会,所以我试图从我不太熟悉的领域中挑选比赛,这迫使我去年研读了成百上千篇论文。

猜你喜欢

转载自blog.csdn.net/xckkcxxck/article/details/84700453