美文网首页我爱编程
Kaggle冠军冲顶经验分享:怎样11步搞定机器学习竞赛?

Kaggle冠军冲顶经验分享:怎样11步搞定机器学习竞赛?

作者: 小谷先生 | 来源:发表于2018-05-13 10:11 被阅读516次

    王小新 编译自 Kaggle官方博客

    image

    最近,一名来自湖南长沙的小哥仅用15个月时间,就冲上了Kaggle用户排行榜的首位,他的ID是Bestfitting。

    他本人叫做Shubin Dai,是一名数据科学家、工程师,生活在长沙,目前领导着一家专注于为银行提供软件解决方案的公司。工作之余,他除了喜欢在Kaggle刷榜外,还是一名狂热的山地车手,喜欢在大自然中度过时光。

    在接受Kaggle采访时,他分享了参赛的心得,也谈了不少机器学习竞赛的战斗经验。 量子位搬运过来,以下为采访译文:

    Q:你能介绍下你的个人信息和相关背景吗?

    我的专业是计算机科学,在软件开发方面拥有超过10年的经验。工作方面,我目前领导着一个为银行提供数据处理和分析解决方案的团队。

    大学毕业后,我一直对使用数学方法编写程序来解决问题很感兴趣。同时,我也不断阅读各种计算机科学的书籍和论文,很幸运地赶上了过去十年中兴起的机器学习和深度学习热潮。

    image

    Bestfitting的Kaggle主页

    Q:你是怎么开始参加Kaggle比赛的?

    如前所述,我一直在阅读大量有关机器学习和深度学习的书籍和论文,但发现想要将这些算法应用到现成的小型数据集上很困难。

    后来,我发现Kaggle上有各种有趣的数据集、算法和精彩讨论,这是一个很棒的平台。我迫不及待想尝试下,于是最开始,我参加了“红帽商业价值预测(Predicting Red Hat Business Value)”竞赛。

    image

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

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

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

    一般包括以下11部分:

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

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

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

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

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

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

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

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

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

    10.模型集成;

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

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

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

    Q:你最喜欢哪个机器学习库?

    我在计算机视觉竞赛中很喜欢用PyTorch库,在自然语言处理或时间序列比赛中会用TensorFlow或Keras库。在数据分析时,我会使用SciPy库,scikit-learn和XGB也是很好用的工具。

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

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

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

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

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

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

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

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

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

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

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

    Q:你最喜欢哪类Kaggle比赛?为什么?

    我最喜欢与自然保护和医疗相关的比赛。我觉得,参加这类比赛,也许可以做点什么来让生活和我们的地球变得更好。

    Q:你最关注机器学习的哪个子领域?

    我对深度学习的各种研究进展十分感兴趣。我想要用深度学习来解决计算机视觉或自然语言处理之外的问题,所以我尝试在一些比赛和日常工作中应用它们。

    Q:在你看来,解决数据科学问题时了解领域专业知识重要吗?

    坦率地说,我认为领域专业知识中不会起到太大帮助,原因如下:

    1.就Kaggle比赛中提供的数据集,这对每个人都是平等的;

    2.仅使用一些成熟方法来赢得比赛,这非常困难,特别是在深度学习比赛中,因此我们需要给出更多具有创造性的解决方案;

    但是,也有例外。例如,在遥感图像识别比赛中,我确实从先前的热带雨林经历中得到一些思路,但这些经历在技术上可能不被称为领域专业知识。

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

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

    Q:你的Kaggle参赛经历对你的目前工作有影响吗?

    我们尝试使用机器学习解决各种银行业务问题,包括预测银行网点的访问人数、预测ATM应准备的现金、产品推荐和操作风险控制等。

    Kaggle的参赛经历也改变了我的工作方式。当我为某个问题寻找解决方案时,我会尝试从相似的Kaggle比赛中寻找思路,因为这都是宝贵资源,并且我还建议我的同事们去研究类似比赛中的获胜解决方案,并从中得到一些启发。

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

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

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

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

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

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

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

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

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

    Q:你有兴趣了解最近举办或是正在进行的机器学习比赛吗?

    我希望今年能参加Kaggle上的深度强化学习比赛。

    image

    量子位猜,大概是这个扑扇的小鸟

    https://www.kaggle.com/c/datalabcup-deep-reinforcement-learning

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

    首先,排行榜的第一名说明了我在Kaggle上学习到很多知识,同时我也很幸运。

    在我的前几次比赛中,我试图把近年来学到的理论知识转化为技巧,而且从其他人那里也学到了很多。

    在对Kaggle比赛有了一些了解后,我开始思考如何以系统化的方式进行比赛,因为我在软件工程方面有多年的经验。

    大约半年后,我获得了一些奖项和一些自信。我想,我可能会在一年内成为一名大师。在遥感图像识别比赛中,我试图去争取金牌,所以当发现我是第一名时,我感到很惊讶。

    于是,我觉得我应该继续使用上面提到的策略和方法,来赢得更多比赛。在赢得Cdiscount图像分类比赛后,我也上升到了用户排名榜的前列。

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

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

    Q:你上面提到你喜欢去研究已完结比赛中评分最高的解决方案。你是否有什么特别的见解?

    我尊重所有获胜者和精彩解决方案的贡献者,他们为之付出很多努力。我总是以一种可敬的态度来研究这些解决方案。

    希望这篇文章能让你在Kaggle比赛中取得更好的名次!

    原文:

    http://blog.kaggle.com/2018/05/07/profiling-top-kagglers-bestfitting-currently-1-in-the-world/

    相关文章

      网友评论

        本文标题:Kaggle冠军冲顶经验分享:怎样11步搞定机器学习竞赛?

        本文链接:https://www.haomeiwen.com/subject/aenkdftx.html