Kaggle-数据分析与机器学习-全-
Kaggle 数据分析与机器学习(全)
原文:
annas-archive.org/md5/5e400d1e59f23bd72038de18c385b577
译者:飞龙
第一章:介绍数据科学竞赛
竞赛编程有着悠久的历史,始于 20 世纪 70 年代,当时举办了第一届国际大学生程序设计竞赛(ICPC)。“国际大学生程序设计竞赛”最初由来自大学和公司的小型团队参加,要求使用计算机程序(最初参赛者使用 FORTRAN 编程)解决一系列问题。为了获得良好的最终排名,团队必须展示出良好的团队合作、问题解决和编程技能。
参与这种竞赛的热潮以及有机会成为招聘公司的焦点,为学生提供了足够的动力,这使得竞赛多年以来一直很受欢迎。在 ICPC 决赛选手中,有几位成为了知名人士。其中,有 Facebook 前首席技术官和 Quora 创始人 Adam D'Angelo,Telegram Messenger 的联合创始人 Nikolai Durov,以及 Apache Spark 的创造者 Matei Zaharia。他们与许多其他专业人士一样,都有同样的经历:参加过 ICPC 某一届的比赛。
在 ICPC 之后,编程竞赛蓬勃发展,特别是在 2000 年之后,远程参与变得更加可行,使得国际竞赛更容易且成本更低。这些竞赛的格式相似,对于大多数此类竞赛来说都是一样的:有一系列问题,你必须编写代码来解决它们。获胜者可以赢得奖品,也可以引起招聘公司的注意,或者在他们同行中变得著名和受欢迎。
在本章中,我们将探讨竞赛编程如何演变为数据科学竞赛,为什么 Kaggle 平台是此类竞赛最受欢迎的网站,以及它是如何运作的。
数据科学竞赛平台的兴起
竞赛编程中的问题通常从组合数学到数论、图论、算法博弈论、计算几何、字符串分析和数据结构等范围。最近,与人工智能相关的问题也成功出现,特别是在知识发现与数据挖掘竞赛 KDD Cup 启动之后,该竞赛由计算机协会(Association for Computing Machinery's,简称ACM)知识发现与数据挖掘特别兴趣小组(Special Interest Group,简称SIG)在其年度会议上举办。
1997 年举办的第一届 KDD 杯涉及了电梯曲线优化的直接营销问题,它开启了一系列长期的竞赛(你可以在www.kdd.org/kdd-cup
找到包含数据集、说明和获奖者的存档,这些竞赛一直持续到今天www.kdd.org/kdd2020/kdd-cup
)。KDD 杯在建立最佳实践方面证明非常有效,许多发表的论文描述了解决方案和技术,以及竞争数据集的共享,这对许多从业者进行实验、教育和基准测试非常有用。
竞赛编程和 KDD 杯的经验共同催生了数据科学竞赛平台,这些平台允许公司举办某些难以解决的数据科学挑战,并可能从群智方法中受益。事实上,鉴于数据科学中不存在适用于所有问题的黄金方法,许多问题需要耗时的“尝试所有可能的方法”的方法。
实际上,从长远来看,没有算法能在所有问题上击败所有其他算法,但每个机器学习算法只有在其假设空间包含解决方案时才会表现良好。然而,你事先无法知道这一点,因此你必须尝试和测试,以确保你正在做正确的事情。你可以查阅“无免费午餐定理”来了解这一实用真理的理论解释,以下是 Analytics India Magazine 关于该主题的完整文章:analyticsindiamag.com/what-are-the-no-free-lunch-theorems-in-data-science/
。
群智在需要广泛测试算法和数据转换以找到最佳组合,但缺乏人力和计算机资源的情况下证明是理想的。这就是为什么政府和企业会求助于竞赛来在某些领域取得进步。在政府方面,我们可以引用 DARPA 及其在自动驾驶汽车、机器人操作、机器翻译、说话人识别、指纹识别、信息检索、OCR、自动目标识别等领域举办的众多竞赛。在商业方面,我们可以引用 Netflix 这样的公司,它委托了一场竞赛来改进其预测用户电影选择的算法。
Netflix 竞赛基于改进现有协同过滤的想法,其目的是简单地根据用户对其他电影给出的先前评分来预测用户对电影的潜在评分,而不了解用户的具体身份或电影的具体内容。由于没有用户描述或电影标题或描述可用(所有这些都由身份代码替代),竞赛要求开发出智能的方法来使用可用的先前评分。只有当解决方案能够将现有的 Netflix 算法 Cinematch 改进到一定阈值以上时,才会分配价值 100 万美元的巨额奖金。该竞赛从 2006 年持续到 2009 年,最终由许多先前参赛团队的融合组成的一个团队获胜(来自 Commendo Research & Consulting GmbH 的一个团队,Andreas Töscher 和 Michael Jahrer,在 Kaggle 竞赛中也相当知名,AT&T Labs 的两名研究人员和 Yahoo!的两名其他研究人员)。最终,赢得竞赛需要如此多的计算能力和不同解决方案的集成,以至于团队不得不合并以保持竞争力。这种情况也反映在 Netflix 实际使用该解决方案上,Netflix 更愿意不实施它,而是简单地从中提取最有趣的见解来改进其现有的 Cinematch 算法(你可以在这篇 Wired 文章中了解更多信息:www.wired.com/2012/04/netflix-prize-costs/
)。在 Netflix 竞赛的最终阶段,更重要的是解决方案本身,因为 Netflix 的业务已经从 DVD 转变为在线电影,解决方案很快就被取代了。对于参与者(他们在协同过滤中获得了巨大的声誉)和公司(可以将改进的推荐知识转移到其新业务中)来说,真正的益处是从竞赛中获得的见解(我们可以进一步说,这种知识也将是本书大部分内容的主题)。
Kaggle 竞赛平台
事实上,除了 Netflix 之外,其他公司也从数据科学竞赛中受益。这个名单确实很长,但我们可以引用一些例子,其中举办竞赛的公司报告了从中获得的明显好处。例如,我们可以提到保险公司 AllState,它通过涉及数百名数据科学家的竞赛改进了由其专家构建的精算模型(www.kaggle.com/c/ClaimPredictionChallenge
)。作为另一个有充分记录的例子,我们还可以提到通用电气,它通过一个类似竞赛将预测航空公司航班到达时间的行业标准提高了 40%(www.kaggle.com/c/flight
)。这两个竞赛都是在 Kaggle 竞赛平台上举办的。
到目前为止,Kaggle 竞赛平台已经举办了数百场比赛,这两家公司只是成功利用其竞赛来提升自己模型和数据分析努力的几个例子。让我们暂时从具体的竞赛中退一步,来谈谈 Kaggle 公司,这是贯穿整本书的线索。
Kaggle 在 2010 年 2 月迈出了第一步,这得益于澳大利亚受过训练的经济学家 Anthony Goldbloom 的创意(他在墨尔本大学获得了经济学和计量经济学学位)。在澳大利亚财政部和澳大利亚储备银行的研究部门工作后,Goldbloom 在伦敦担任《经济学人》的实习生,这是一份关于时事、国际商业、政治和技术的国际周刊。在《经济学人》工作期间,他有机会撰写一篇关于大数据的文章,这激发了他建立一个能够众包解决有趣机器学习问题的竞赛平台的想法(www.smh.com.au/technology/from-bondi-to-the-big-bucks-the-28yearold-whos-making-data-science-a-sport-20111104-1myq1.html
)。由于众包动态在这个平台商业理念中起到了相关的作用,他创造了 Kaggle 这个名字,这个名字通过押韵回忆起“gaggle”一词,即一群鹅(鹅也是该平台的象征)。
在搬到美国硅谷后,他的 Kaggle 初创公司从 Khosla Ventures 和 Index Ventures 这两家相当知名的创业投资公司那里获得了 1125 万美元的 A 轮融资。第一轮竞赛推出后,社区逐渐壮大,一些最初的竞争者逐渐崭露头角,例如澳大利亚数据科学家和企业家 Jeremy Howards,他在 Kaggle 赢得了几场比赛后,成为了公司的总裁和首席科学家。Jeremy Howard 于 2013 年 12 月辞去了总裁职务,此后他创办了新的初创公司 fast.ai (www.fast.ai),为程序员提供机器学习课程和深度学习库。
当时还有其他杰出的 Kagglers(这个名字用来指代参加 Kaggle 举办的竞赛的频繁参与者),例如 Jeremy Achin 和 Thomas de Godoy。在达到平台全球前 20 名排名后,他们迅速决定退休并成立了自己的公司 DataRobot。他们很快开始在 Kaggle 竞赛的参与者中招聘他们最好的员工,以便将最好的机器学习知识和实践融入到他们正在开发的软件中。如今,DataRobot 在自动机器学习(autoML)领域无疑是一家领导者。
Kaggle 竞赛吸引了越来越多的关注,甚至深度学习之父 Geoffrey Hinton 也参与了 2012 年由默克公司主办的 Kaggle 竞赛(并获胜)(www.kaggle.com/c/MerckActivity/overview/winners
)。Kaggle 也是 Francois Chollet 在 Otto 集团产品分类挑战赛期间推出他的深度学习包 Keras 的平台(www.kaggle.com/c/otto-group-product-classification-challenge/discussion/13632
),以及 Tianqi Chen 在希格斯玻色子机器学习挑战赛中推出了 XGBoost,这是一种比梯度提升机更快、更准确的版本(www.kaggle.com/c/higgs-boson/discussion/10335
)。
一场又一场的竞赛之后,围绕 Kaggle 的社区在 2017 年增长到一百万,那一年,在 Google Next 的开幕式上,谷歌首席科学家李飞飞宣布,谷歌 Alphabet 将收购 Kaggle。从那时起,Kaggle 成为了谷歌的一部分。
今天,Kaggle 社区仍然活跃并不断发展。它为许多参与者提供了创建自己的公司、推出机器学习软件和包、在杂志上接受采访(www.wired.com/story/solve-these-tough-data-problems-and-watch-job-offers-roll-in/
)、在 Coursera 上安排课程(www.coursera.org/learn/competitive-data-science
)、撰写机器学习书籍(twitter.com/antgoldbloom/status/745662719588589568
)、找到他们的理想工作,以及最重要的是,或者只是了解更多关于数据科学技能和技术细节的机会。
其他竞赛平台
尽管这本书专注于 Kaggle 上的竞赛,但我们不能忘记,许多数据竞赛是在私人平台或其他竞赛平台上举行的。实际上,你在这本书中找到的大部分信息也将适用于所有其他竞赛,因为它们基本上遵循相似的原则,参与者所获得的利益与 Kaggle 的大致相同。
由于许多其他竞赛平台特定于某些国家或专注于某些类型的竞赛,为了完整性,我们将简要介绍其中一些,至少是我们有一些经验和知识的一些。
DrivenData (www.drivendata.org/competitions/
) 是一个致力于社会挑战的众包竞赛平台(参见www.drivendata.co/blog/intro-to-machine-learning-social-impact/
)。该公司本身是一家社会企业,其目标是利用数据科学家为公共利益构建算法,将数据科学解决方案带给解决世界最大挑战的组织。例如,你可以阅读这篇文章,www.engadget.com/facebook-ai-hate-speech-covid-19-160037191.html
,了解 Facebook 如何选择 DrivenData 来举办其针对仇恨言论和错误信息的模型构建竞赛。
Numerai (numer.ai/
) 是一家位于旧金山的基于人工智能和众包的对冲基金,它每周举办一场比赛,你可以提交你对对冲基金加密数据的预测,并使用公司加密货币 Numeraire 赢得奖品。
CrowdAnalytix (www.crowdanalytix.com/community
) 现在活动稍微少了一些,这个平台曾经举办过不少有挑战性的竞赛,你可以从这篇博客文章中了解到:towardsdatascience.com/how-i-won-top-five-in-a-deep-learning-competition-753c788cade1
。此外,社区博客也非常有趣,可以让你了解这个平台上可以找到哪些挑战:www.crowdanalytix.com/jq/communityBlog/listBlog.html
。
Signate (signate.jp/competitions
) 是一个日本数据科学竞赛平台。它竞赛丰富,并提供类似于 Kaggle 的排名系统(signate.jp/users/rankings
)。
Zindi (zindi.africa/competitions
) 是一个来自非洲的数据科学竞赛平台。它举办专注于解决非洲最紧迫的社会、经济和环境问题的竞赛。
Alibaba Cloud (www.alibabacloud.com/campaign/tianchi-competitions
) 是一家中国云计算和人工智能提供商,它推出了天池学术竞赛,与 SIGKDD、IJCAI-PRICAI 和 CVPR 等学术会议合作,并包括基于图像的 3D 形状检索、3D 物体重建或实例分割等挑战。
Analytics Vidhya (datahack.analyticsvidhya.com/
) 是最大的印度数据科学社区,提供了一个数据科学黑客松的平台。
CodaLab (codalab.lri.fr/
) 是一个基于法国的数据科学竞赛平台,于 2013 年由微软和斯坦福大学合作创立。它提供了一个类似的核心功能(在这里称为工作表:worksheets.codalab.org/
),用于知识共享和可重复建模,类似于 Kaggle。
其他较小的平台包括瑞士洛桑联邦理工学院(École Polytechnique Fédérale de Lausanne)的CrowdAI (www.crowdai.org/
),InnoCentive (www.innocentive.com/
),用于生物医学成像的Grand-Challenge (grand-challenge.org/
),DataFountain (www.datafountain.cn/business?lang=en-US
),OpenML (www.openml.org/
),等等。你可以在俄罗斯社区Open Data Science (ods.ai/competitions
)上找到许多正在进行的重大竞赛列表,从而不时发现新的竞赛平台。
除了 Kaggle 之外,还有许多替代方案和机会。这样一个丰富机会的有趣之处在于,你可以更容易地找到一个可能更吸引你的竞赛,因为它具有专业化和数据。此外,由于这些挑战不太为人所知和宣传,因此可以预期竞争压力较小。此外,可以预期参与者之间的分享较少,因为到目前为止,没有其他竞赛平台达到了 Kaggle 所拥有的相同丰富程度的分享和网络工具。
竞赛的阶段
Kaggle 上的竞赛是通过不同的步骤安排的。通过查看每个步骤,你可以更好地理解数据科学竞赛是如何运作的,以及可以期待什么。
当一项竞赛启动时,社交媒体上通常会有一些帖子(例如在 Kaggle 的 Twitter 个人资料:twitter.com/kaggle
)来宣布它,并且在www.kaggle.com/competitions
页面上的活跃竞赛之间会出现一个新标签页。如果你点击竞赛标签页,你将被带到竞赛页面。立即,你可以至少查看竞赛是否会有奖品(以及是否颁发积分和奖牌,这是参与竞赛的次要后果),目前有多少团队参与,以及你还有多少工作要做来解决问题。
在那里,你可以首先探索概览菜单,这将为你提供关于比赛主题、评估指标(你的模型将根据该指标进行评估)、比赛时间表、奖品以及法律或比赛要求的信息。通常时间表会被忽视,但它应该是你首先要检查的事情之一,实际上它不仅仅告诉你比赛开始和结束的时间,它还会提供规则接受截止日期,这通常是在比赛关闭前七天到两周。规则接受截止日期标志着你可以通过接受其规则加入比赛的时间限制,以及团队合并截止日期:你可以在那个截止日期之前安排将你的团队与其他竞争对手的团队合并,之后将不可能合并。此外,规则菜单经常被忽视(人们只是跳到数据),但检查它们很重要,因为它们可以告诉你比赛的要求。从规则中你可以获得的关键信息包括获奖资格以及一些其他重要细节,例如你是否可以使用外部数据来提高你的分数,你每天可以得到多少提交(你的解决方案的测试),你可以选择多少个最终解决方案,等等。最后,你可以查看数据,尽管你只能在接受比赛规则后才能下载它。
一旦你接受了规则,你就可以下载任何数据或直接开始在 Kaggle Kernel 上工作,这是一个仅有的笔记本,可以重用其他参与者提供或从头开始创建的代码。如果你决定下载数据,也要考虑你有一个 Kaggle API 可以帮助你以几乎自动化的方式运行下载和提交。你可以在www.kaggle.com/docs/api
找到更多关于 API 的详细信息,你还可以从github.com/Kaggle/kaggle-api
获取代码。顺便说一句,如果你仔细检查 Kaggle 的 GitHub 仓库,你还可以找到他们用于在线笔记本 Kaggle Kernels 的所有 Docker 镜像。在这个阶段,当你开发你的解决方案时,通过讨论论坛联系其他竞争对手并不是一个坏主意:在那里你可以提问和回答问题。通常你也会在特定问题的数据或甚至有用的想法中找到有用的提示,以改进你的解决方案。
一旦你的解决方案准备好了,你可以根据比赛的规格将其提交给 Kaggle 评估引擎(一些比赛将接受 csv 文件作为解决方案,其他则要求你在 Kaggle Kernel 中编码并生成结果)。在整个比赛中,你都可以提交解决方案。
每次提交解决方案后,排行榜会很快提供评分和排名,具体取决于评估所需的计算。这个排名只是指示性的,因为它反映了你的模型在测试集的一部分上的表现,这部分被称为公共测试集,因为其表现会在比赛期间对所有人公开。只有当比赛结束时,参赛者决定对其模型中的哪些部分进行评分,他们才会公布在测试集的另一部分上的分数,这部分被称为私人测试集。这个新的排行榜,即私人排行榜,构成了比赛的最终、有效的排名。
当一项比赛结束后,Kaggle 团队将花费一定时间来检查一切是否正确,并确保所有参赛者都遵守了比赛的规则。经过一段时间(有时还会伴随一些变化)后,私人排行榜将变为最终版,获胜者将被宣布,许多参赛者会根据自己的意愿在比赛讨论论坛上公开他们的策略、解决方案和代码。
比赛类型及示例
Kaggle 比赛根据“比赛类别”进行分类,每个类别在如何竞争以及可以期待什么方面都有不同的含义。数据类型、问题的难度、提供的奖金和比赛动态在类别内部相当多样化,因此事先了解每个类别意味着什么非常重要。
这里是您可以用来筛选不同比赛的官方类别:
-
精选
-
大师
-
年度比赛
-
研究
-
招聘
-
开始
-
操场
-
分析
-
课堂内
“精选”是最常见的比赛类型,它涉及赞助公司提出的与商业相关的问题,并为比赛中的顶尖表现者提供奖金。获胜者将授予赞助公司非独家许可权,并需要准备一份详细的解决方案报告,有时甚至需要参加与赞助公司的会议。
每次访问 Kaggle 时,都会有一些特色竞赛的例子。目前,许多竞赛都与将深度学习方法应用于非结构化数据(如文本、图像、视频或声音)相关,但在过去,表格数据竞赛是基于数据库中可以找到的结构的化数据相关问题的竞赛。现在,这类竞赛的需求实际上已经减少,因为众包解决方案通常不会在数据科学家优秀团队或甚至 autoML 软件所能达到的层面上有太大的进步。过去,使用随机森林,然后使用梯度提升方法以及巧妙的特征工程,从 Kaggle 得到的表格数据解决方案确实可以大幅提高解决方案。如今,鉴于更好软件和良好实践的普及,竞赛所能获得的提高结果可能确实微乎其微。在非结构化数据领域,一个优秀的深度学习解决方案仍然可以做出差异,例如,预训练网络如 BERT 在许多知名文本中的标准上带来了两位数的提升。
“大师级”竞赛现在不那么常见了,但它们是私人的、仅限邀请的竞赛。其目的是创建仅限于专家(通常是根据 Kaggle 奖牌排名被评为大师或特级大师的竞争者)之间的竞赛,基于他们在 Kaggle 上的排名。
“年度”竞赛是一年中的特定时期出现的竞赛。在年度竞赛中,我们有圣诞老人竞赛(通常基于算法优化问题)和每年在美国大学篮球锦标赛期间举行的 3 月机器学习竞赛。
“研究”竞赛意味着具有研究或科学目的,而不是商业目的,有时是为了服务于公众利益。这就是为什么这些竞赛并不总是提供奖品。此外,这些竞赛有时要求获胜者将他们的解决方案作为开源发布。
Google 在过去发布了一些研究竞赛,例如 2020 年的 Google 地标识别竞赛(www.kaggle.com/c/landmark-recognition-2020
) - 在图像中标记著名(以及不那么著名)的地标
想要测试潜在求职者能力的赞助商会举办“招聘”竞赛。这些竞赛仅限于单人团队,并为排名靠前的竞争者提供与赞助商的面试作为奖品。如果竞争者希望在竞赛结束后被考虑联系,他们必须在竞赛结束时上传他们的简历。
招聘竞赛的例子包括:
-
Facebook 招聘竞赛(
www.kaggle.com/c/FacebookRecruiting
),但实际上 Facebook 举办了几次这类竞赛 -
Yelp 招聘竞赛(
www.kaggle.com/c/yelp-recruiting
)
“入门”竞赛不提供任何奖品,但提供了一个友好且简单的难题,让初学者熟悉 Kaggle 的原则和动态。通常它们是半永久性的竞赛,其排行榜会不时更新。如果你在寻找机器学习的教程,这些竞赛是开始的地方。
著名的持续入门级竞赛包括:
-
泰坦尼克号:灾难中的机器学习(
www.kaggle.com/c/titanic
) - 预测泰坦尼克号的生存情况 -
房价预测:高级回归技术(
www.kaggle.com/c/house-prices-advanced-regression-techniques
)
“Playground”竞赛比入门级竞赛稍微难一些,但它们也是为了让竞争者在没有完全成熟的特色竞赛压力下学习和测试他们的能力(尽管有时在 Playground 竞赛中竞争的激烈程度也可能相当高)。这类竞赛的常规奖品只是周边产品或少量金钱。
一个著名的 Playground 竞赛是原始的“狗与猫”竞赛(www.kaggle.com/c/dogs-vs-cats
) - 创建一个算法来区分狗和猫
应该提到的是 Analytics 竞赛,其中评估是定性的,参与者需要提供想法、解决方案草案、PowerPoint 幻灯片、图表等等,以及由学术机构举办的InClass竞赛。
在 Kaggle 竞赛的分类中,你还得考虑到竞赛可能具有不同的格式。通常的格式是所谓的“简单格式”,其中你提供解决方案,然后按照我们之前描述的方式进行评估。更复杂的是,两阶段竞赛将竞赛内容分为两部分,并且只有在第一阶段完成后,才会向第一阶段参与者发布最终数据集。两阶段竞赛格式出现是为了限制某些竞争者可能作弊和违反规则的机会,因为评估是在一个完全未尝试的测试集上进行的,而这个测试集只短暂可用。出于同样的原因,最近也出现了代码竞赛,所有提交都来自 Kaggle 笔记本,并且禁止直接上传提交。
提交和排行榜动态
显然,Kaggle 的工作方式看似简单:测试集对参与者保密;你拟合你的模型,如果你的模型在预测测试集方面表现最佳,那么你的得分就高,你可能会获胜。不幸的是,这样的描述过于简化了 Kaggle 竞赛的内部运作,并且没有考虑到竞争者之间直接和间接的互动,以及你所面临的问题及其训练集和测试集的细微差别。
卡内基梅隆大学统计学教授大卫·多诺霍(web.stanford.edu/dept/statistics/cgi-bin/donoho/
)在其著作《数据科学五十年》中实际上给出了对 Kaggle 工作方式的更全面描述。该论文最初发表在《计算与图形统计杂志》上,随后又发布在麻省理工学院计算机科学与人工智能实验室(见courses.csail.mit.edu/18.337/2015/docs/50YearsDataScience.pdf
)。多诺霍教授并没有具体提到 Kaggle,而是泛指所有数据科学竞赛平台。引用计算语言学家马克·利伯曼的话,他将数据科学竞赛和平台视为一种通用任务框架(CTF)范式,在过去几十年中默默而稳步地推进了许多领域的科学数据。他指出,CTF 可以从经验角度极大地改善数据科学问题的解决方案。他引用了 Netflix 竞赛和许多 DARPA 竞赛作为成功的例子,这些竞赛重塑了许多领域问题的最佳解决方案。
CTF 由“成分”和“秘制酱料”组成(参见多诺霍,大卫。“数据科学五十年。”《计算与图形统计杂志》26.4(2017):745-766.的第 6 段)。成分很简单:
-
一个公开可用的数据集和相关预测任务
-
一组共同承担生成最佳预测任务的竞争者
-
一种对参与者的预测进行公平和客观评分的系统,不提供过于具体的提示(或最多限制它们),关于解决方案
如果任务定义得很好,数据质量良好,系统工作效果最佳。从长远来看,解决方案的性能通过小幅度的提升直到达到极限。通过允许参与者之间一定程度的共享(如 Kaggle 通过讨论、共享内核笔记本和额外数据集的方式)可以加速这个过程。可以注意到,尽管参与者之间有共享,但竞争压力并不会停止解决方案的改进,它只是使改进过程变慢。
这是因为 CTF 范式中的秘密成分就是竞赛本身,在需要改进其实验性能的实践问题框架中,总是导致新基准、新数据和建模解决方案的出现,以及一般而言,将机器学习更好地应用于竞赛所针对的问题。因此,竞赛可以提供解决预测问题的新方法,新的特征工程方法,新的算法或建模解决方案。例如,深度学习并非仅仅来自学术研究,它首先因为成功竞赛而获得了巨大的推动力,这些竞赛宣布了其有效性(例如,我们已经提到了 Geoffrey Hinton 团队赢得的 Merck 竞赛www.kaggle.com/c/MerckActivity/overview/winners
)。
与开放软件运动相结合,这允许每个人都能访问强大的分析工具(如 Scikit-learn 或 TensorFlow 或 PyTorch),CTF 范式带来了更好的结果,因为所有竞争对手在起点上都站在同一条线上。另一方面,解决方案对竞赛的依赖性在于专用或改进的硬件,这可能会限制可达到的结果,因为它可能会阻止无法访问这些资源的竞争对手正确参与并直接贡献于解决方案,或者通过在其他参与者身上施加竞争压力间接地做出贡献。可以理解的是,这也是为什么 Kaggle 开始向其竞赛的参与者免费提供云服务(Kernels)的原因:它可以平息一些硬件密集型竞赛(如大多数深度学习竞赛)中的某些差异,并增加整体竞争压力。
无论如何,总有一些情况可能会出错,从而导致竞赛中出现次优结果:
-
数据泄露
-
从排行榜(评分系统)进行探测
-
过度拟合及其后果
-
私有共享
当解决方案的一部分需要在数据本身中重新追踪时,会出现数据泄露。例如,某些变量是目标变量的后继变量(因此它们揭示了它的一些信息)或训练和测试示例的顺序,或者某些标识符暗示了解决方案。这种解决方案泄露,有时被竞争对手称为“黄金特征”(因为对数据问题中这种细微差别的了解可能会变成参与者的奖金),不可避免地导致不可重复使用的解决方案。这也意味着赞助商(至少应该了解到应该影响其问题解决方案的泄露特征)会得到次优结果。
另一个问题是从排行榜中探测解决方案的可能性。在这种情况下,你可以通过在排行榜上重复提交尝试来窃取解决方案。再次强调,在这种情况下,解决方案在完全不同的环境中是完全不可用的。一个这样的例子发生在比赛“不要过拟合 II”(www.kaggle.com/c/dont-overfit-ii
)中。在这场比赛中,获胜者 Zachary Mayers 将每个单独的变量作为一个单独的提交,从而获得了关于每个变量可能权重的信息,这使他能够估计出他模型正确的系数(你可以在 Zach 的详细解决方案中阅读:www.kaggle.com/c/dont-overfit-ii/discussion/91766
)。一般来说,时间序列问题(或测试数据中存在系统变化的其它问题)可能会受到探测的严重影响,因为它们可以帮助竞争者成功定义某种“后处理”(例如,将他们的预测乘以一个常数),这在特定的测试集中得分最高。
另一种排行榜窃密的形式发生在参与者倾向于更多地依赖公共排行榜的反馈而不是他们自己的测试时。有时这会导致比赛的完全失败,伴随着激烈的动荡,即最终排行榜上竞争者位置的完全不可预测的重新洗牌。在这种情况下,获胜的解决方案可能(但不总是)对问题不是那么优化,甚至有时可能只是由机会决定的。这导致竞争者对训练集与必须猜测的测试集差异很大进行了精确的分析。这种分析被称为“对抗性测试”,如果依赖排行榜,以及如果存在与训练集和测试集差异太大的特征,可以提供洞察(例如,你可以看看 Bojan Tunguz 的这个 Kernel:www.kaggle.com/tunguz/adversarial-ieee
))。另一种防止排行榜过拟合的防御方式是选择安全的策略来避免根据排行榜结果提交过多的解决方案。例如,由于每个参赛者允许选择两个解决方案在比赛结束时进行评估,一个好的策略是提交在排行榜上表现最好的一个和基于自己交叉验证测试表现最好的一个。
为了避免排行榜探测和过拟合的问题,Kaggle 最近基于代码竞赛引入了不同的创新,其中评估被分为两个不同的阶段,也就是说,你有一个用于公共排行榜(你在比赛中跟踪的排行榜)的测试集,以及一个完全保留的用于最终私有排行榜的测试集。这样,参与者实际上对他们的解决方案将被评估的实际数据是盲目的,并且他们应该被迫更多地考虑他们自己的测试以及针对测试集的更一般性的解决方案。
最后,竞赛的另一种可能的扭曲是由于私人共享(在参与者封闭圈中分享想法和解决方案)以及其他非法行为,如使用多个账户或多个团队参与,并从每个团队中窃取想法以利于另一个团队。所有这些行为都会在参与者之间造成信息不对称,这对少数人有利,对大多数人有害。再次强调,由于竞赛期间共享不完善,并且较少的团队能够充分发挥竞争压力,因此产生的解决方案可能会受到影响。此外,如果参与者明显意识到这种情况(例如,参见www.kaggle.com/c/ashrae-energy-prediction/discussion/122503
),可能会导致不信任并减少对竞赛或后续竞赛的参与。
计算资源
一些竞赛确实设定了限制,以便使可行的解决方案可用于生产,例如博世生产线性能竞赛 - www.kaggle.com/c/bosch-production-line-performance
- 对你的解决方案的执行时间、模型文件输出和内存限制有严格的限制。此外,基于内核的竞赛,当要求在内核上执行训练和推理时,不会对你要使用的资源造成问题,因为 Kaggle 将提供你需要的所有资源(这也是为了将所有参与者置于同一起跑线,以获得更好的竞赛结果)。
当你只有内核竞赛仅限于推理时间时,问题就出现了,因此你可以在自己的机器上训练你的模型,唯一的限制就是基于测试时产生的模型的数量和复杂性。由于目前大多数竞赛都需要深度学习解决方案,你必须考虑你确实需要专门的硬件,如 GPU,才能在竞赛中获得一些有趣的结果。无论如何,即使你参加了一些现在罕见的表格竞赛,你很快就会意识到你需要一台强大的机器,拥有相当数量的处理器和内存,以便轻松应用特征工程到数据,快速运行实验和构建模型。
标准确实变化很快,因此很难提及一种标准硬件,以便至少与其他人处于同一联赛水平。无论如何,我们可以通过观察其他竞争对手使用什么硬件来获得这样的标准提示,无论是他们自己的机器还是云上的机器。
例如,最近惠普推出了一项计划,它将一台 HP Z4 或 Z8 赠送给一些精选的 Kaggle 参与者,以换取其品牌的曝光。例如,Z8 机器有 56 个核心,3TB 的内存,48TB 的存储(由固态硬盘提供良好的份额)以及 NVIDIA RTX 作为 GPU。我们理解这对许多人来说可能有点难以触及,甚至租用类似机器在云实例上(如 Google 的 GCP 或 Amazon 的 AWS)进行短期租用,也因为即使是适度使用也会产生相应的费用。
因此,除非你的雄心壮志是攀登到 Kaggle 参与者排名的顶端,我们的建议是使用 Kaggle 提供的免费机器,即 Kaggle 笔记本(也以前被称为 Kaggle Kernels)。
Kaggle 笔记本是一个基于在云机器上运行的 Docker 容器的版本化计算环境,允许你使用 R 和 Python 语言编写和执行脚本和笔记本。Kaggle 笔记本集成到 Kaggle 环境中(你可以从它们提交并跟踪哪些提交与哪个笔记本相关),它们预装了大多数数据科学包,并允许一些定制(你可以下载文件并安装更多包)。基本的 Kaggle 笔记本是基于 CPU 的,但你也可以拥有由 NVIDIA Tesla P100 或 TPU v3-8(TPU 是专门用于深度学习任务的硬件加速器)增强的版本。尽管受限于使用数量和时间配额限制,但 Kaggle 笔记本提供了在 Kaggle 竞赛中构建基准解决方案的计算动力:
-
一台 CPU 笔记本拥有 4 个 CPU 核心 16 GB 的内存,你可以同时运行 10 台这种类型的笔记本,但你没有为它们分配任何时间配额。
-
一台 GPU 拥有 2 个 CPU 核心 13 GB 的内存,你可以在有 30 小时每周配额的情况下同时运行 2 台这种类型的笔记本。
-
一台 TPU 拥有 4 个 CPU 核心 16 GB 的内存,你可以在有 30 小时每周配额的情况下同时运行 2 台这种类型的笔记本。
所有笔记本的最大运行时间为 9 小时,有 20 GB 的磁盘保存配额来存储你的模型和结果,以及一个额外的临时使用磁盘,在脚本运行期间可以超过 20 GB。
在某些情况下,Kaggle 核提供的增强型 GPU 机器可能不足以满足需求。例如,最近的深度伪造检测挑战赛(www.kaggle.com/c/deepfake-detection-challenge
)需要处理大约 500 GB 的视频数据。这主要是因为每周使用时间的限制,在撰写本文时大约是每周 30 小时,以及你不能同时运行超过两台带有 GPU 的机器(对于仅 CPU 实例,一次最多 10 台)。即使你可以通过将代码改为利用 TPU 而不是 GPU 来加倍你的机器时间(你可以在以下位置找到一些实现该目标的简单指导:www.kaggle.com/docs/tpu
),这仍然可能不足以在数据密集型竞赛如深度伪造检测挑战赛上进行快速实验。这就是为什么在关于 Kaggle 核的章节中,我们将为您提供许多技巧和窍门,以在无需购买高性能机器的情况下,以令人满意的结果成功应对这些限制。我们还将向您展示如何将 Kaggle 核与Google Cloud Services(GCP)集成,或者简单地说,如何将所有工作迁移到另一个基于云的解决方案。
团队合作和网络
然而,计算能力扮演了它的角色,但在 Kaggle 竞赛中,人类的专家知识和能力才能真正带来差异。有时,要成功处理一场竞赛,需要一群参赛者的协作努力。除了招募竞赛,赞助商可能需要个别参与者以更好地评估他们的能力外,通常在竞赛期间形成团队没有限制。通常,团队可以由最多五名参赛者组成。团队合作有其自身的优势,因为它可以增加寻找更好解决方案的努力,因为团队可以共同花费更多时间在问题上,不同的技能可以大有帮助:并不是所有数据科学家都拥有相同的技能或在不同模型和数据操作中拥有相同的技能水平。
无论如何,团队合作并非全是积极的。协调不同个人和不同努力以实现共同目标可能并不容易,可能会出现一些次优情况。团队通常的问题在于,当部分参与者不参与或简单地闲置时,但最糟糕的情况无疑是,更罕见的是,有人违反了竞赛规则(这对所有人都有害,因为整个团队可能会被取消资格)或者甚至间谍活动,以使其他团队受益。
尽管存在任何负面因素,但在 Kaggle 竞赛中组队是一个了解其他数据科学家、为了一个目标而协作并取得更多成就的绝佳机会,因为 Kaggle 的规则确实在某种程度上奖励团队而非孤独的竞争者。虽然在 Kaggle 中,组队并不是唯一的网络方式,但它无疑是参与者更盈利和更有趣的选择。你实际上可以通过论坛上的讨论、在竞赛中共享数据集和笔记本来与其他人建立联系。平台上的所有这些机会都可以帮助你了解其他数据科学家,并得到他们的认可。
在 Kaggle 平台之外,与其他 Kagglers 建立联系的机会也相当多。首先,有几个 Slack 频道可能会有所帮助。例如,KaggleNoobs(见:www.kaggle.com/getting-started/20577
)是一个频道,它于 5 年前开放,有很多关于 Kaggle 竞赛的讨论,并且有一个支持性的社区,如果你在代码和模型方面遇到具体问题,他们可以提供帮助。还有许多其他频道致力于交换关于 Kaggle 竞赛和数据科学相关主题的意见。一些频道是根据地区或国家组织起来的。例如,日本频道 Kaggler-ja (kaggler-ja-wiki.herokuapp.com/
) 或六年前创建的俄罗斯社区,开放数据科学网络 (ods.ai/
),后来也向非俄语使用者开放。开放数据科学网络(通常简称为 ODS)不仅提供了一个 Slack 频道,还提供了关于如何赢得竞赛的课程、活动和报道,这些活动涉及所有知名数据科学平台上的活跃竞赛(见 ods.ai/competitions
)。
除了 Slack 频道之外,还有许多以 Kaggle 为主题或关于特定竞赛的本地聚会涌现出来,有些持续时间较短,有些则较长。Kaggle 竞赛的聚会,通常围绕一个想要分享其经验和建议的竞争者的演讲而建立,是亲自遇见其他 Kagglers、交流意见和建立共同参与数据科学竞赛联盟的最佳情况。在这个联盟中,特别值得一提的是由 Maria Parysz 和 Paweł Jankiewicz 创建的 Kaggle Days(kaggledays.com/
),他们是一位著名的 Kaggle 竞争者。Kaggle Days 组织在世界各地的主要地点安排了一些活动(kaggledays.com/about-us/
),目的是聚集一场 Kaggle 专家的会议(由于 COVID-19 大流行而突然停止),并创建了一个在不同国家仍然相当活跃的本地聚会网络(kaggledays.com/meetups/
)。
性能层级和排名
除了金钱奖励之外,Kaggle 还提供了许多其他非物质奖励(除了一些物质奖励,如杯子、T 恤、连帽衫和贴纸)。关键在于 Kagglers,即 Kaggle 竞赛的参与者,在竞赛中确实投入了大量的时间和精力(不计他们在比赛中使用的专业技能,这些技能在普通人中实际上相当罕见)。金钱奖励通常覆盖了少数顶尖选手的努力,如果不是唯一顶尖选手的努力,那么剩下的选手就只是自愿投入了大量时间而没有回报。从长远来看,没有实质结果的竞赛可能会导致不满和兴趣下降,从而降低竞争强度。因此,Kaggle 至少找到了一种通过基于勋章和积分的荣誉体系来奖励竞争者的方法。其理念是,勋章和积分越多,技能的相关性就越高,这为求职或任何基于声誉的相关活动提供了机会。
首先,有一个总排行榜,它结合了所有单个竞赛的排行榜。在这个总排行榜(www.kaggle.com/rankings
)中,一个人的排名基于他在每个单个竞赛中的位置,这会授予一些积分,所有积分加在一起提供了总排行榜的排名。乍一看,竞赛中积分计分的公式可能看起来有点复杂:
然而,在现实中,它仅仅基于几个因素:竞赛中的排名、你的团队规模、竞赛的流行程度以及竞赛的历史长短。
直观来说,在流行的竞赛中排名靠前会带来很多积分。不那么直观的是,团队的大小以非线性方式影响结果。这是因为公式中的倒数平方根部分,因为需要放弃的积分部分随着参与人数的增加而增长,但如果你的团队相对较小(最多 2 至 3 人),由于大型协作团队带来的智慧和计算能力优势,这仍然相当有利。
另一点需要记住的是,随着时间的推移,积分会衰减。衰减不是线性的,但可以作为一个经验法则,认为一年后你获得的积分所剩无几。因此,在 Kaggle 的一般排行榜上的荣耀不会持久,它是短暂的,除非你继续参加竞赛,并取得与以前相似的结果。作为安慰,在你的个人资料中,你将始终保留你曾经达到的最高等级,作为你在某个特定时间取得出色综合成绩的纪念。
更重要的是,奖牌系统涵盖了 Kaggle 竞赛的所有四个方面。你将在竞赛、笔记本、讨论和数据集方面根据你的结果获得奖牌。在竞赛中,奖牌是根据你在排行榜上的位置颁发的。在其他领域,如讨论、笔记本和数据集,奖牌是根据其他竞争者的点赞数颁发的(这有时会导致一些次优情况,因为点赞是一个不那么客观的指标,也取决于人气)。获得的奖牌越多,你能够进入的 Kaggle 精通等级就越高。等级分为新手、贡献者、专家、大师和宗师。www.kaggle.com/
进阶页面解释了如何获得奖牌以及需要多少以及哪种类型的奖牌才能进入不同的等级。
请记住,这样的等级和荣誉总是相对的,并且它们会随时间而变化。实际上,几年前,评分系统和等级相当不同。很可能会在未来,等级会再次改变,以保持高级别更罕见,从而更有价值。
批评和机会
Kaggle 自成立以来就受到了不少批评,并且今天许多人仍在争论是否参加数据科学竞赛,他们提出了不同的负面或正面观点。
在负面批评方面:
-
Kaggle 给人一种错误的印象,认为机器学习究竟是什么,因为它只关注排行榜的动态。
-
Kaggle 仅仅是一场超参数优化和集成多个模型的游戏,只是为了获得一点更高的准确度(而实际上是在对测试集进行过拟合)。
-
Kaggle 充满了缺乏经验的爱好者,他们愿意尝试任何可能的方法来获得分数和关注,希望被招聘者注意到。
-
作为进一步的后果,竞赛解决方案过于复杂,通常过于特定于测试集,以至于无法实施。
许多人认为 Kaggle,就像许多其他数据科学竞赛平台一样,与数据科学的实际情况相去甚远。他们提出的问题是,商业问题并非凭空而来,你很少一开始就有一个准备好的数据集来开始,因为你通常是在根据细化商业规格和解决当前问题的理解过程中逐步构建它的。此外,他们强调,生产方面并未被考虑,因为一个获胜的解决方案不能受限于资源限制或技术债务的考虑(尽管这并不总是适用于所有竞赛)。
我们不得不注意到,所有这样的批评最终都与 Kaggle 是一个具有目的性的众包体验(CTF 范式)以及 Kaggle 排名在数据科学世界中的相关性有关,与数据科学教育和工作经验相比。一个持续的神话是,Kaggle 竞赛可能有助于你在数据科学领域获得工作或更好的工作,或者参加 Kaggle 竞赛可能会使你在不参与的所有数据科学家之上处于另一个层面。
我们对这种神话的立场是,这是一个误导性的信念,即 Kaggle 排名在 Kaggle 社区之外具有自动价值。例如,在求职过程中,Kaggle 可以为你提供一些非常有用的建模数据和问题的能力,以及有效的模型测试。它还可以让你接触到许多技术和不同的数据/商业问题(甚至超出你的实际经验和舒适区),但它不能为你提供作为数据科学家在公司成功定位所需的一切。
你可以用 Kaggle 来学习和在求职中区别于其他候选人;然而,这将被如何考虑将因公司而异。无论如何,你在 Kaggle 上所学到的知识将不可避免地在你的整个职业生涯中证明是有用的,并在你需要用数据建模解决复杂和不同寻常的问题时为你提供保障。通过参加 Kaggle 竞赛,你将建立起强大的建模和验证能力。你还会与其他数据科学家建立联系,这可以使你更容易地获得工作推荐,并提供另一种处理超出你技能范围困难问题的方法,因为你可以访问他人的能力和观点。
因此,我们的观点是,Kaggle 可以更间接地帮助你作为数据科学家的职业生涯,并且它可以通过不同的方式做到这一点。当然,有时 Kaggle 会直接帮助你,因为你的竞赛成功而被作为求职候选人联系,但更常见的是,Kaggle 会通过提供你需要成功作为候选人然后作为实践者的智力和经验技能来帮助你。事实上,在 Kaggle 上玩数据和模型一段时间后,你将有机会看到足够多的不同数据集问题以及处理它们的方法,在时间的压力下,当面对现实环境中的类似问题时,你将非常擅长快速有效地找到解决方案。
实际上,这种技能提升的机会正是我们最初写作这本书的动力所在,也是这本书真正要讲述的内容。实际上,你在这里不会找到仅仅关于如何在 Kaggle 竞赛中获胜或取得高分的指南(实际上,也有在线资源可以在这方面启发你),但你会找到关于如何在 Kaggle 上更好地竞争,以及如何从竞赛经验中获得最大价值的指南。
智能地使用 Kaggle 和其他竞赛平台。Kaggle 并非万能的,在竞赛中排名第一并不能保证你得到高薪工作或在 Kaggle 社区之外获得荣耀。然而,持续参与竞赛实际上是一张需要巧妙打出的牌,以展示你对数据科学职位的兴趣和热情,并提高一些可以让你作为数据科学家脱颖而出而不是被自动机器学习解决方案淘汰的特定技能。
如果你打算跟随我们阅读这本书,我们将向你展示如何做。
第二章:使用数据集组织数据
在他的故事《铜色短裤奇案》中,亚瑟·柯南·道尔让福尔摩斯喊道“数据!数据!数据!没有粘土我无法制造砖块”——这种心态,对文学中最著名的侦探来说效果非常好,每个数据科学家都应该采纳。因此,我们以一个专门介绍数据的章节开始这本书的技术部分:具体来说,在 Kaggle 的背景下,利用 Kaggle 数据集功能来满足我们的目的。
设置数据集
在原则上,你可以使用任何数据(受限于以下法律注意事项),你可以上传到 Kaggle。本书撰写时的具体限制是:每个数据集 20 吉字节,总配额 100 吉字节。请注意,单个数据集的大小限制是计算未压缩的——上传压缩版本可以加快传输速度,但不会帮助克服限制。你可以通过此链接检查数据集的最新文档:
Kaggle 将自己宣传为“开放数据科学的家园”,并且从该网站提供的令人印象深刻的数据集集合确实为这一说法增添了一些可信度:在将你的项目数据上传到数据集之前,请确保检查现有内容——对于几个流行的应用,它可能已经被存储在那里:
为了介绍的目的,让我们假设你将在项目中使用的数据类型尚未存在——因此你需要创建一个新的。当你点击左侧带有三条线的菜单并点击数据时,你将被重定向到数据集页面:
当你点击新建数据集时,你将被提示输入基本信息:上传实际数据和给它一个标题:
请记住,Kaggle 是一个流行的平台,所以很多人上传他们的数据到那里——包括私有的(不可公开查看)——所以尽量想一个非通用标题。
哇!你的第一个数据集已经准备好了。然后你可以转到数据标签:
在原则上,你不必填写所有字段——你新创建的数据集在没有它们的情况下也可以完美使用(如果它是私有的,你可能也不在乎——毕竟你知道里面有什么)。然而,社区礼仪会建议填写你公开的信息:你指定得越多,数据对其他人就越有用(并且通过可用性评分来衡量,显示在上右角)。
收集数据
除了法律方面(见本章最后部分)之外,在数据集中存储的内容类型实际上没有限制:表格数据、图像、文本——如果你符合大小要求,你可以存储它。这包括从其他来源收集的数据:在撰写本文时,按标签或主题收集的推文是流行的数据集之一:
讨论从社交媒体(Twitter、Reddit 等)收集数据的不同框架超出了本书的范围。
在 Kaggle 之外使用 Kaggle 数据集
Kaggle 内核免费使用,但并非没有限制(更多内容请见第四章)——您可能首先遇到的是 8 小时的时限。一个流行的替代方案是迁移到完全在云端运行的免费 Jupyter 笔记本环境 Google Colab:
但即使我们将计算移动到那里,我们可能仍然希望访问 Kaggle 数据集——因此将它们导入 Colab 是一个相当方便的功能。
我们首先做的事情——既然您正在阅读这篇文章,我们假设您已经在 Kaggle 上注册——是前往账户页面生成 API 令牌:
-
前往“您的账户”并点击创建新的 API 令牌
-
将包含您的用户名和令牌的名为
kaggle.json
的文件创建
下一步是在您的驱动器中创建一个名为“Kaggle
”的文件夹并将.json
文件上传到那里
完成后,您需要创建一个新的 Colab 笔记本并将您的驱动器挂载:
从 URL 提示中获取授权代码并在空框中提供,然后执行以下代码以证明到.json
配置文件的路径:
我们现在可以下载数据集:首先前往 Kaggle 并复制 API 命令:
运行代码:
数据集将以.zip
存档的形式下载——解压后即可使用。
围绕数据集构建
一旦创建了数据集,您可能希望将其用于分析。您可以使用数据集作为主要来源启动内核:前往数据集页面顶部菜单中的活动标签并滚动到该块:
或者,您可以通过点击创建讨论来围绕数据开始对话。
法律注意事项
仅因为您可以将一些数据上传到 Kaggle,并不意味着您应该这样做——一个很好的例子是“Tinder People”数据集:2017 年,一位开发者使用 Tinder API 爬取网站上的半私密资料,并将数据上传到 Kaggle。问题曝光后,Kaggle 最终撤下了该数据集。您可以在此处阅读完整故事:
通常,在您上传任何内容到 Kaggle 之前,请问自己两个问题:这是否合法(从版权角度来看——始终检查许可证)以及此数据集是否存在任何风险(隐私或其他)。
第三章:使用 Kaggle 笔记本学习和工作
Kaggle 笔记本——直到最近还被称为内核,所以如果我在偶尔使用这些术语时互换使用,请见谅——是浏览器中的 Jupyter 笔记本,可以免费运行。这意味着您可以从任何有互联网连接的设备执行实验,尽管比手机大一点的设备可能是个好主意。环境的规格说明(截至本文写作时)如下所示:
不再拖延,让我们直接进入正题。我们首先要做的是弄清楚如何设置笔记本。
设置内核
创建笔记本有两种主要方法:从主页或从数据集级别。
要进行第一种方法的操作,请转到 www.kaggle.com/
着陆页左侧菜单的代码部分,并按下新建笔记本按钮。如果您计划进行涉及上传自己的数据集的实验,这是一个首选方法。
或者,您可以访问您感兴趣的数据集页面,并点击那里的新建笔记本按钮:
无论您选择哪种方法,在点击新建笔记本后,您将被带到您的笔记本页面:
默认情况下,新笔记本初始化时语言设置为Python——如果您想使用 R,请点击右侧的语言下拉菜单,您的笔记本将切换到R:
使用笔记本的一个重要方面:您始终可以取一个现有的(由某人创建)并克隆它以修改和调整以满足您的需求。这可以通过在内核页面上按下复制并编辑按钮来实现,尽管在 Kaggle 术语中,这个过程被称为分支:
关于礼仪的注意事项:如果您参加过 Kaggle 比赛,您可能已经注意到排行榜被高分笔记本的分支所淹没。在别人的工作上建立没有错——但如果您这样做,请记得点赞原始作者。
您创建的笔记本默认是私有的(即只有您可见)。如果您想让它对其他人可用,您可以选择
升级到 GCP
有时候,Kaggle 免费提供的资源可能不足以满足您的任务需求,您可能需要迁移到一个更强大的机器。您可以自己设置整个环境——或者您可以在笔记本框架内保持,但更换底层机器。这就是 Google Cloud AI Notebooks 的作用所在。
为了将您的笔记本迁移到 GCP 环境,请转到左侧侧边栏菜单并点击升级到 Google Cloud AI 笔记本:
您将看到提示:
之后,你将被重定向到谷歌云平台控制台,在那里你需要配置你的计费选项——与 Kaggle 不同,GCP 不是免费的。如果是你第一次使用,你需要完成一个教程,它会引导你完成必要的步骤:
超越一步
如本章前面所述,Kaggle 笔记本是教育和参与比赛的一个极好的工具,但它们还服务于另一个极其有用的目的,即作为你作品集的一部分,可以用来展示你的数据科学技能。
在构建你的数据科学作品集时,有许多潜在的考虑因素(品牌建设、受众覆盖、向潜在雇主展示等),但如果没有人能找到它们,那么这些因素都不重要。因为 Kaggle 是谷歌的一部分,笔记本由世界上最受欢迎的搜索引擎索引——所以如果有人正在寻找与你代码相关的主题,它将出现在他们的搜索结果中。
下面我举一个“个人”的例子:几年前,我为一个比赛写了一个笔记本——我想解决的问题是对抗验证(对于那些不熟悉这个话题的人来说:一个相当简单的方法是,通过构建一个训练有素的二元分类器来区分训练集和测试集,以查看它们是否有相似的分布)。在撰写这一章时,我尝试了这种方法,结果令人惊讶,它出现在搜索结果的高位(注意我在查询中并没有提到 Kaggle 或任何个人细节,如名字):
接下来,让我们看看使用笔记本展示技能集的其他好处:就像比赛、数据集和讨论一样,笔记本可以获得投票/奖牌,从而在进步系统和排名中定位你。你可以远离比赛赛道,仅通过专注于社区所欣赏的高质量代码,成为专家/大师/宗师。最新的进步要求版本可以在www.kaggle.com/progression
找到,下面我们给出与笔记本相关的快照:
你的 Kaggle 个人资料带有关注者/被关注选项,并为你提供了链接其他专业网络(如 LinkedIn 或 GitHub)的可能性,这样你就可以利用在社区中获得的联系:
在这个时代,对“社区建设”的宣称持怀疑态度是很常见的——但在 Kaggle 的情况下,这竟然是真的。他们在数据科学领域的品牌认知度无人能及,无论是对于从业者还是那些真正做足功课的招聘者来说。在实践中,这意味着一个(足够不错的)Kaggle 个人资料已经可以让你迈过门槛——正如我们都知道的,这通常是最难的一步。
Kaggle 课程
Kaggle 的许多事情都是关于获取知识,无论是你在比赛中学习到的知识,还是你在不断增长的存储库中找到的数据集,或者是展示一个以前未知的模型类别,总有新东西可以探索。这个集合中最新的补充是汇集在Kaggle Learn标签下的课程:www.kaggle.com/learn
。这些是 Kaggle 作为“获得独立数据科学项目所需技能的最快方式”进行营销的微课程,核心统一主题是在各种主题上提供快速入门课程。每门课程都分为小章节,随后是编码实践问题。
下面,我们提供它们内容的简要总结:
-
Python:
www.kaggle.com/learn/python
你将学习函数、布尔变量、循环、列表和字典的基础知识。 -
机器学习入门/中级机器学习:
www.kaggle.com/learn/intro-to-machine-learning
这两门课程最好看作是一个两集系列:第一集介绍了机器学习中使用的不同类别的模型,随后讨论了不同模型共有的主题,如欠拟合/过拟合或模型验证。第二集则深入到特征工程,处理缺失值和处理分类变量。 -
Pandas:
www.kaggle.com/learn/pandas
: 这门课程提供了对现代数据科学中最基本工具之一的快速介绍。你首先学习如何创建/读取/写入数据,然后转向数据清洗(索引、选择、组合、分组等)。 -
数据可视化:
www.kaggle.com/learn/data-visualization
每个人都知道一张图片可以值千言万语——如果你想学习如何创建这样的图像来总结你的数据科学成果,这门课程就是为你准备的。你将学会如何处理从折线图到热图和散点图的每一件事。 -
特征工程:
www.kaggle.com/learn/feature-engineering
这门短期课程展示了关于编码分类数据、通用特征生成和选择的基本理念。 -
数据清洗:
www.kaggle.com/learn/data-cleaning
另一门短期课程,有助于解决学术课程中最明显的遗漏之一:让学生意识到现实生活中的数据有多混乱。 -
SQL 入门/高级 SQL
www.kaggle.com/learn/intro-to-sql
在这门课程的组合中,你将学习如何使用 SQL 提取数据。从基本的 SELECT 变体开始,你将学习 GROUP BY、HAVING,一直到 JOINs/UNIONs,并探索分析函数和嵌套数据。 -
地理空间分析
www.kaggle.com/learn/geospatial-analysis
本课程将教你如何使用 GeoPandas 创建你的第一张地图,并介绍创建交互式和分县图的方法。还将介绍邻近分析的基础知识。 -
深度学习入门
www.kaggle.com/learn/intro-to-deep-learning
本课程提供了一个对现代深度学习中最重要方法论的快速介绍。使用结构化数据,你将熟悉梯度下降、批量归一化等基本概念,并将这些知识应用于二分类的典型问题。 -
计算机视觉
www.kaggle.com/learn/computer-vision
和 自然语言处理www.kaggle.com/learn/natural-language-processing
是两门快速课程,介绍了深度学习成功应用的两个最重要的领域,产生了令人印象深刻的最新技术水平。介绍了迁移学习和数据增强的关键主题,为你提供了立即投入实践的工具。 -
游戏人工智能
www.kaggle.com/learn/intro-to-game-ai-and-reinforcement-learning
本课程是对 Kaggle 在学习模块中引入的技术重点部分的完美总结。你将编写一个游戏智能体,调整其性能,并使用最小化算法。 -
机器学习可解释性
www.kaggle.com/learn/machine-learning-explainability
建立模型很有趣,但在现实世界中,并非每个人都是数据科学家,所以你可能会发现自己需要向他人解释你所做的工作。这就是模型可解释性迷你课程发挥作用的地方:你将学习使用三种不同的方法来评估你的特征的相关性:置换重要性、SHAP 和部分依赖图。 -
人工智能伦理
www.kaggle.com/learn/intro-to-ai-ethics
这最后一门课程是对提案的一个非常有趣的补充:它讨论了指导人工智能系统道德设计的实用工具。你将学习如何识别人工智能模型中的偏差,检验人工智能公平性的概念,并了解如何通过传达机器学习模型信息来提高透明度。
除了 Kaggle 创建的原始内容外,该平台还提供了多种其他使用内核的学习机会。一个值得提及的突出例子是极受欢迎的 fast.ai 课程:www.kaggle.com/general/63077
在本章中,我们讨论了 Kaggle 内核:这是一个多用途、开放的编码环境,可用于教育、实验以及推广你的数据科学项目组合。