返回 登录
2

在Kaggle上赢得大数据竞赛的技巧和窍门

原文The tips and tricks I used to succeed on Kaggle
作者:Vik Paruchuri
翻译:雁惊寒

译者注:Kaggle是一个为开发商和数据科学家提供举办机器学习竞赛、托管数据库、编写和分享代码的平台。本文作者讲述了自己在该平台上多次赢得竞赛的成功经验。以下是译文。

kaggle

我曾经通过参加Kaggle的竞赛来学习机器学习。在2011年,在几乎不懂数据科学的情况下,我参加了第一场竞赛。很快,我就在一场股票交易大赛中获得了大约一百个人中的第五名。在接下来的一年里,我赢得了自动化论文评分和债券价格预测的几场竞赛,并在其他方面也取得了不错的成绩。

Kaggle竞赛需要独特的技能、运气和团队合作才能获胜。各类知识掺杂在一起,因竞赛类型的不同而不同,而且经常会令人感到惊讶。

例如,在人格预测竞赛过程中,我大部分时候都是第一或者第二名,但是,由于在特征选择阶段过度拟合而最终获得了第十八名。在Kaggle的博客上可以找到在竞赛结束时发生的那些看似是半随机变化的好帖子。

在这篇文章中,我将分享自己在Kaggle竞赛中获得成功的诀窍。

坚持不懈,持之以恒

要在Kaggle竞赛中取得成功,首要条件就是坚持不懈。当你看到第一次提交的排名时,很容易会产生气馁的情绪,但你绝对应该继续尝试下去。在一场竞赛中,我在一个主题上差不多尝试了所有的方法。

在我的第一次Kaggle竞赛,“照片质量预测”竞赛中,我最终排在了第50名,我不知道那些顶级对手所做的与我做的有什么不同。

然后,我开始从竞赛中总结经验。在我的第二场竞赛,“算法交易挑战赛”中,成绩比原先好了一点。

从照片质量预测到算法交易,影响竞赛结果发生变化的因素正是学习和坚持不懈。在第一场竞赛中,我并没有花太多的时间,所以结果就体现出来了。

提交错误答案较多,最终的分数当然不会好。你应该在竞赛的过程中阅读尽可能多的文献(和博客文章等等)。只要你学到的新东西可以应用在竞赛中,或者从失败的提交中学到东西(也许某个特定的算法或解法并不合适于这个数据),那么,说明你已经走上正轨。

坚持不懈的动力来自于自身内部。为了让自己愿意去学,你必须要问自己为什么要参加这么一个特定的竞赛。你想要学习吗?你想要通过一个较高的名次来获得某些机会吗?或者你只是想要证明你自己吗?大多数Kaggle竞赛的金钱奖励并不值得消耗大量的时间,所以,除非你清楚地知道你自己想要什么,如何激励自己。对你来说名次重要吗?如果不重要,你可以很轻松的学到一些有趣的东西,这些可能会也可能不会影响成绩,但是如果你想要得第一名,你就不会这样了。

把时间花在数据准备和特征构建上

要取得好的名次,最重要的与数据相关的因素是如何准备数据,以及如何构建特征。算法的选择很重要,无需多言。

你只需要使用直觉和常识,弄清楚什么是有效的,什么是无效的。对竞赛真正有帮助的是创建一个好的交叉验证框架,以便得到可靠的误差估计。

特征构建是数据科学为什么如此有趣、如此有创意,并且与其他一些类型的编程有所不同的原因。

不要忽视特定领域的知识

因为特征构建是一个非常特殊的领域,所以,拥有相关领域的知识对竞赛的帮助很大。

我发现,在竞赛中,你可以通过学习很快地掌握该特定领域的知识。例如,当我在参加Hewlett基金会的ASAP大赛时,我学会了NLP方法。也就是说,你需要快速地掌握你原先不了解的相关领域的特定知识,不然,你就无法在竞赛中与别人竞争。

明智地挑选你的竞赛

你应该在最开始的时候选择竞争比较弱的竞赛。研究性竞赛的竞争选手往往要比大奖赛的少。后来,我发现,经常参加更有挑战性的竞赛对我帮助很大,因为它迫使你学习更多的知识,让你走出舒适圈。

找一个好的团队

形成一个好团队至关重要。在两个不同的竞赛(ASAP和Bond)中,我很幸运地能够与优秀的人士合作,我从他们身上学到了很多。大家往往认为存在这两种人:一种是几乎总是单独工作的人,另一种是几乎总是在团队中和其他人一起工作的人。但如果尝试着把这两种情况结合起来,你将收益更多。你可以从团队工作中学到很多的东西,但是如果你独立工作的话,你可以学到原本需要依赖队友才能完成的东西。

其他的哲学

还有一些不是特别重要,但是在竞赛的时候需要始终牢记在脑子里的事情。

运气会起到作用

我以前曾经提到过,运气也很重要。例如,在一些竞赛中,第三和第四名就差了0.001%。在这一点上,很难说他们谁的方法是更好,但是却只有其中一个被认为是赢家。 我想,这就是Kaggle上的一个事实。

不要因为一个不了解的主题而放弃竞赛

机器学习的伟大之处在于,你可以将类似的技术应用于几乎任何问题上。你无需挑选那些熟悉的或者有特别见解的那个领域问题,坦白地说,独立学一些新知识,做一些新的事情更有意思。当你在某一天突然有了一个好的想法,其他人也许也会想到,但是他们可能要在到第20天或第60天才会去实施。

不要担心Kaggle个人资料

不要因为名次低而担心。有时,你会看到某个有趣的竞赛,但是你可能没办法花太多的时间在这上面,从而无法得到一个好的名次。请不要担心这个。没有人会以名次取人!

对你来说,更重要的是从准备答案的过程中获得经验学到知识,而不是担心你个人资料中的名次会怎么样。

获胜的条目是由许多小步骤组成的

每个获胜的Kaggle条目都是由数十个小的见解组成。如果你做到了上面所有这些,不断地学习,并且不断地迭代你的解决方案,你就会做得更好。

不要停止学习

有数百篇Kaggle教程和文章,还有数千篇有关机器学习的文章、书籍和资源。不要停止学习,不要害怕使用Google来回答你的问题。

此外,Kaggle论坛是一个很好的资源,KaggleNoobs社区也不错。

最后,令人惊叹的Eliot Andres维护了一个可搜索和可排序的Kaggle过去所有解决方案的汇总。一旦你要准备参加竞赛,你可以从中了解到获胜者们是如何做的:Kaggle过去的解决方案

总结:坚持和学习

强调的两个主要观点是坚持和学习。这两个概念可以很好的体现出我在Kaggle的经历,即使没有赢得竞赛,只要你学到了一些东西,你所花的时间就是值得的。

如果你有兴趣开始使用Kaggle,那么我强烈建议你阅读Kaggle教程

评论