本文转载自公众号“读芯术”(ID:AI_Discovery)。
如果你一直关注Kaggle新闻,那对Mechanisms of Action竞赛应该不陌生,该比赛由哈佛创新科学实验室举办,近日刚刚落下帷幕。在这场比赛中,我和搭档Andy Wang成功进入前4%——在4373支队伍中排第152名,对此我感到十分骄傲。
其实我们对于Kaggle比赛挺陌生的。我们不是机器学习领域的专业人士,只是在网上在线课程学习了Python和机器学习而已。
毋庸置疑,我们并没有拿到金牌。整场比赛前10名才有资格获得金牌,难度非同一般。金牌选手需要给出的方案往往非常复杂。下面这幅图就是排名第一的队伍所提出的7-model方案中的一部分:
图中有很多复杂网络拓扑结构
Kaggle通常会采访获胜者,从而深入了解他们的解决方案(大多都是非常优秀的方案)。但是,我发现这些获胜者很少提及如何能在这种类型的竞赛中做到“高效”。花费大量的时间设计方案,一点一点地提高成绩,或许能让参赛者获得金牌以及数量可观的现金。但是对于大多数人来说,这种方式的实操性并不高。
获得金牌与获得3万美元奖金也许只有0.0002分之差。
这篇文章中,我会列出我和搭档所学、所用的秘诀和小技巧。我们还在不断地学习和摸索,希望这篇文章能够给大家带来助益。
总的来说,我们的秘诀有两点,分别是技能普适性和方式高效性,之后还可以再细分到技术层面和策略层面。
技术层面技巧
下面的技巧偏向技术层面。这些比较具体的专业技巧可以用于编程方案,在Kaggle比赛优秀的参赛作品中也很常用。
1. 完美无缺的特征工程
如果说我从这次比赛中学到了什么,那就是“特征工程是关键”。简单来说,特征工程就是提取已有特征并不断添加新的特征,这可以是简单的将两列相乘。
在常用的机器学习方法中,神经网络可视为神奇的万能方案,据说神经网络可以从数据中学习任何东西。不过事实并非如此,大多数时候,一个模型要想通过数据学习的话,还需要人类从旁协助。
模型的优劣取决于数据的好坏,最好提供尽可能多的信息让原始数据有意义。对特征工程有帮助的两个观点:
特征工程是一门艺术。最重要的是要记住在进行特征工程时要考虑到数据环境。如果数据在现实生活中没有意义(例如将两个彼此没有关系的列相乘),很可能不会帮助模型更好地理解数据。
图源:unsplash
2. 严格把控功能选择
全力以赴地进行特征工程是很好的做法,但同样重要的是要记住,过多的数据会让模型不堪重负,给学习重要内容带来困难。精确判断哪些特征要留存,又有哪些特征要剔除,可以对模型大有裨益。
通常,删除列时要尽量保守一些。数据不可多得,所以只有当你确定数据不会有什么用处时,才可以把它删除。
3. 先理解指标,再设计方案。
Kaggle会按照一定的指标来评估参赛方案,并以此决定参赛者的名次。有时候会用模型评估指标(AUC),有时也可能会用对数损失函数(logloss)。Kaggle一般会在竞赛概览的“评估”部分提供其用到的公式。
Kaggle为Mechanismsof Action竞赛提供的公式
你需要留意这些指标,因为它们往往决定了参赛者该如何构造方案。比如,使用一个与评估函数非常相似的特定损失函数,将提高模型在该指标下的性能。
以对数损失函数为例。对互联网进行深挖能够带来很多有用信息,而对数损失函数会惩罚自信且错误的预测。也就是说,在预测中,模型越自信,对其错误性的罚分也会上升的越快。关于这一点还有很多需要仔细斟酌:
(1) 首先,如果系统性错误(即模型不能对数据进行理解)使得模型在对数损失方面非常糟糕,那么此时让模型变得更“迟钝”可能会有帮助。至少在即将要得出错误答案之前,它不会显得自信。
可以通过增加数据(依情况而定)或者降低模型的自信来完善模型。若是想偷懒,也可以只使用“目标裁剪”:如果预测小于1%或大于99%,那么只需要分别将其裁剪在1%和99%。这样就避免了任何过度自信的答案(当然了,还有另一个方向就是如何让模型的系统误差更小,更好的理解数据)。
(2) 其次,也许模型能够较好地理解数据。但是模型过于迟钝,那么与其说是有系统性错误,不如说是有精确性错误。这就提供了一个新思路:可以尝试套袋法或其他集成方法,稳定预测的可信度,增强预测自信。
这些思维方式使得数学知识能够转化为实际的技术,并给数据科学带来无限的创造性与趣味性。
4. 接下来是建模的相关策略
建模单调乏味,是因为我们通常把建模过程视为完成任务:
看起来似乎只有有限的建模顺序,特别是在你经验有限且不习惯使用低层代码的情况下。其实建模艺术中也有很多乐趣和学问。下面是一些可行建议:
最后,还有些方法值得一试:将集合中的预测结果创造性地结合在一起;除ReLU以外的激活函数(比如,Leaky ReLU,Swish);对非树形模型的‘boosting’(将对一个模型的预测输入到另一个模型中用以学习错误)等等。
每个人都能建模,不会写TensorFlow的源代码也能开发出复杂且成功的模型,开发模型只需要拥有创造力和实现想法的意愿。
图源:unsplash
策略技巧层面
这部分提到的技巧更多与参赛者在竞赛中的策略使用和心理状态相关。
1. 经常查看讨论区
我必须承认,想出新的思路太难了。能够站在愿意分享信息的巨人肩上也挺好的,这值得鼓励。这里有太多值得一试的想法,定期查看讨论区有助于了解哪些有用,哪些没用。
比赛中,一个名为TabNet的模型获得了前所未有的成功。这个模型弥补了神经网络在处理表格数据上的缺陷。因此,我们对其进行了研究并将之纳入了我们的最后一版方案,其中就包括了TabNet的两种变体。但是,要记住,不能把别人的想法作为探索的终点,而是要作为一个跳板。有以下两点原因:
2. 不要过于关注公开的排行榜
Kaggle有一个公开的排行榜系统和一个非公开的排行榜系统。
从最终确定的排行榜中不难发现,公开的排行榜和非公开的排行榜之间有很大的差异,参赛者名次可能会前后移动数百个位次。Kaggle可能是用这种系统来防止作弊。
参赛者在公开的排行榜上的名次更多的只是一个范围,而不是确定的位次。很有可能最终的名次会比公开的排行榜上的名次上下浮动5%。因此,这能很好的估量排名所在的范围,但是离最终的名次还有一定距离。
不要因为公开的排行榜上的分数而灰心丧气(或备受鼓舞)。在比赛中设计方案时一定要记住所给出的测试数据也只是真实的测试数据的一小部分而已。
请铭记这一切都是为了增长见识!
图源:unsplash
在比赛中,照搬照抄他人辛苦所得的方案很容易就让人掉入圈套,只为了疯狂追求增加那一点点分数的零头。
Kaggle真的是一场以增长见识、经验为目的竞赛。对于大多数人来说,不管是微调复杂模型,还是为了神经网络仔细琢磨优化器的具体变种,都不值得花费数小时的时间,但正是这种大量的试验和经验才是最最重要的。
只要我们专注于学习和思考,我们就有可能取得很大的进步。这就是高效成功学的核心:利用有限的精力和时间获得最大的学习效果。
Kaggle的排名本身就代表着在数据科学领域学习的巨大成就。然而,除非你已经有很大希望获得奖金(这很不错),那么这个排名仅仅只是一个里程碑,并不能保证为参赛者带来任何工作。
正如Monolith AI的高级数据科学家Gareth Jones在一篇文章中所写的:“最近,我发现至少有两位雇佣我从事现今工作的人完全不知道我在Kaggle的资料,尽管在我的简历还有领英的顶部都有链接。”
“话虽如此,在面试的过程中,我能够详细的讨论各种Kaggle的项目。因此,Kaggle竞赛在这方面肯定是非常有用的。在我现在所从事的工作之前,我的大部分的机器学习和实践经验都是从Kaggle中获得的。我想不论如何得来的经验都弥足珍贵。”
想要通过Kaggle获得经验,有以下几个要点需要注意:
下面是要点总结。
技术学习:
策略学习:
希望你学有所思、有所获。
日前 阿里云云效联合阿里云大学团队 面向全国高校学子正式启动了83行代码重构大...
近期进展 在 ffmpeg-go init 之后,项目也收到了一些关注,还有几个同学发邮件探...
前言 语言的内存管理是语言设计的一个重要方面。它是决定语言性能的重要因素。无...
鉴于近期加密货币大涨,导致很多小(韭)白(菜)纷纷入场,然后很多人都在问显卡挖...
文本作者:刘晓国,Elastic 公司社区布道师。新加坡国立大学硕士,西北工业大学...
场景描述 最近使用 Redis 遇到了一个类似分布式锁的场景,跟 Redis 实现分布式锁...
云计算服务正在以前所未有的速度在各行各业快速普及,成为IT应用的最主流实现形...
AnalyticDB for MySQL是云端托管的PB级高并发低延时数据仓库 通过AnalyticDB for...
客户介绍 闲鱼是依托阿里电商体系的前台型业务,有非常独特的业务特点和用户诉求...
本文转载自微信公众号「见贤思编程」,作者泰斗贤若如 。转载本文请联系见贤思编...