学习数据科学的最好方法是在练习中学。如果可以回到过去,我想告诉三年前的自己:去Kaggle注册一个账号,并且开启你的比赛之旅。
尽管 Kaggle 和经典数据科学之间存在差异,但 Kaggle 仍然是一种很好的入门工具。作为一个流行的数据科学竞赛平台,Kaggle提供了许多企业中的实际问题和丰富的数据集供我们练习和探索。2017年3月谷歌收购了Kaggle。斯坦福大学人工智能实验室与视觉实验室负责人李飞飞说:人工智能的发展需要数据民主化以及越来越多的数据和模型,这是我们对 Kaggle 高度重视及收购的原因。Kaggle作为数据科学业内享有盛名的平台,在业界拥有极高的认可度。如果你正在寻找一份数据科学相关的工作,那么Kaggle的比赛经历将是你的加分项。
1.如何入门Kaggle?
入门Kaggle你可能需要下面的一些准备:
(1)首先,如果你之前用过Python或者R语言,那么你可以省去学习一门新的编程语言的环节;如果没有接触过也没有关系,你可以准备一本编程语言的书,如《Python核心编程》或者《R语言实战》,我们在阅读前辈们写的代码的同时,可以边翻书边学习,在阅读过一些项目的源码后对于常用的一些方法我们就会很快地上手了。此外Kaggle的Learn板块提供了许多免费且实用的实践课程,这些课程涵盖了快速入门所需的课程。如Python,R,SQL,Machine Learning,Deep Learning等课程。
(2)其次,你需要一些基本的统计学知识,如了解均值,标准差的基本概念。
(3)再次,拥有数据可视化的技能也是基本的要求,图形通常可以为我们带来一些有意义的发现,如发现那些对结果有重要影响的变量。
(4)最后,熟悉一些基本的机器学习的知识,如通过阅读机器学习的经典书籍,如广受好评的西瓜书《机器学习》,掌握常用算法的基本原理。
2.Kaggle竞赛都有哪些类型?
Kaggle上的项目竞赛分成下面4个最常见的类别:
(1)Featured:这些通常是由公司、组织甚至政府赞助的,奖金池最大。
(2)Research:这些是研究方向的竞赛,只有很少或没有奖金。
(3)Recruitment:这些是由想要招聘数据科学家的公司赞助的。目前仍然相对少见。
(4)GettingStarted(练习项目):这些竞赛的结构和 Featured 竞赛类似,但没有奖金。它们有更简单的数据集和大量教程。
3.怎么开始一个竞赛项目?
如果你从未独立做过一个数据分析相关的项目,就从Getting Started(练习项目)开始入门。如果你想直接参与到竞赛中,可以先提交一个最基本的解决方案,熟悉基本的流程,然后可以学习一些优化方法,不断提高自己的分数和排名。Kernels为我们提供了学习的地方,Kernels是Kaggle的Jupyter笔记本版本(Jupyter提供了一种非常有效的和代码互动的方式,可以通过一行一行地运行代码看到输出结果)。在Kernels板块可以看到参加比赛的其他选手分享的数据分析和解决方案。既可以看到比赛的baseline(基准方案),也可以看到比赛结束后获奖者分享的获奖方案。
4.比赛的流程通常是怎样的?
一个完整的比赛流程通常有以下几个步骤:
(1)探索性数据分析:EDA (Exploratory Data Analysis)。这一阶段通过做一些简单的可视化来理解数据。最常用到的Python可视化包有matplotlib和seaborn;
(2)数据预处理(Data Preprocessing)。这一阶段通常会处理一些缺失值,异常值,进行数据类型转换,pandas包为处理数据提供了方便。
(3)特征工程(Feature Engineering)。特征在分数提高中起着重要的作用,FeatureEngineering 能做到什么程度,取决于对数据领域的了解程度。我们可以通过不断学习,提高构造特征的能力。在特征构造完成后,有时会出现特征维度过多,或者有些特征之间可能会存在线性关系,影响模型性能,这时通过特征选择挑选出重要的特征,提高模型性能的同时也可能带来分数的提高。
(4)基本模型构建(Model Building)。这一环节主要通过常用的单一模型(Kaggle 上最常用的模型基本都是基于树的模型)建模,会涉及到如何选择模型,模型训练和调参,交叉验证等步骤。
(5)模型融合(Model Ensemble)。这一环节主要是为了改善单模型的效果,通常来说Ensemble是将多个不同的Base Model组合成一个Ensemble Model 的方法。Ensemble可以同时降低最终模型的偏差和方差,从而在提高分数的同时又可以降低过拟合的风险。
常见的 Ensemble 方法有:
(1)Bagging:使用训练数据的不同随机子集来训练k个Base Model。对于分类问题,将得到的k个模型采用投票的方式得到分类结果;对于回归问题,计算k个模型的均值作为最后的结果。
(2)Boosting:迭代地训练Base Model,每次根据上一个迭代中预测错误的情况修改训练样本的权重。由于Boosting有降低偏差的效果,因此在分数提高上比Bagging效果好,但更容易过拟合。
(3)Blending:用不相交的数据训练不同的Base Model,将它们的输出取(加权)平均。优点是实现简单,但未能充分利用训练数据。
(4) Stacking:相比Blending,Stacking能更好地利用训练数据。其原理类似于交叉验证。在后续涉及到Stacking方法的时候会结合比赛项目做详细介绍。
从理论上讲,Ensemble要成功,有两个要素:
(1)Base Model间的相关性要尽可能的小。Ensemble的各个模型之间差别越大,最终模型的偏差就越低。
(2)Base Model间的性能表现不能差距太大。这其实是一个Trade-off,在实际中很有可能表现相近的模型只有寥寥几个而且它们之间相关性还不低。但是实践告诉我们即使在这种情况下Ensemble还是能大幅提高成绩。
附:
关于Kaggle的一些知识点:
1. 不同比赛有不同的任务,分类、回归、推荐、排序等。比赛开始后训练集和测试集就会开放下载。
2. 比赛通常持续两到三个月,每个队伍每天可以提交的次数有限,通常为 5 次。
3. 比赛结束前一周是一个 Deadline,在这之后不能再组队,也不能再新加入比赛。所以想要参加比赛请务必在这一Deadline 之前有过至少一次有效的提交。
4. 一般情况下在提交后会立刻得到得分的反馈。不同比赛会采取不同的评分基准,可以在分数栏最上方看到使用的评分方法。
5. 反馈的分数是基于测试集的一部分计算的,剩下的另一部分会被用于计算最终的结果,所以最后排名会变动。
6. LB 指的就是在 Leaderboard 得到的分数,由上,有 Public LB 和 Private LB 之分。
7. 自己做的 Cross Validation 得到的分数一般称为 CV 或是 Local CV。一般来说 CV 的结果比 LB 要可靠。
一些参考文章:
1.https://dnc1994.com/2016/04/rank-10-percent-in-first-kaggle-competition
2.https://www.zhihu.com/question/23987009