最近几天一直在学习Machine Learning的只是,自从知道Kaggle这个网站以来,成为Grand Master的计划也被提到了日程上来。
做了几个Get Started的competitions之后逐渐总结了一下机器学习的一个例程。
首先,在Data Science的时候,有下面三个点非常重要:
- 对数据的认识特别重要。通过研究数据本身的特点,数据与数据之间的关系,往往会给我们之后的工作带来灵感。
- Feature Engineering特别重要。我们有一个词叫做Magic Feature,就是引入这个Feature以后你的score会有一个很明显的上升。所以说Feature Engineer可以在一定程度上帮助我们的提升自己的ranking。
- Model Ensemble特别重要。大家都知道撸一个baseline model是一件特别容易的事情,所以大家都能达到baseline model的score。而在所有tricks中,最能明显提升你的ranking的,一个是Feature Engineering,还有一个就是Model Ensemble。
这个可以说是我们在kaggle比赛之前必须了解的点,下面我们就来看看我们机器学习的基本流程。
一. EDA
(1). 从整体上了解你的数据
先了解一些基本的概念:
首先,数据基本上可以分为两大类,Numerical Data和Categorical Data。前者又可以分为Discrete Value和Continuous Value。
对于Numerical Data,他独有的特性有:mean, std, max和min等。我们可以用pandas中的describe方法来描述。
# For numerical data
data_set.describe()
对于Discrete Data,他独有的特性有:unique, count等。我们依然可以用pandas中的describe方法来描述。
# For continuous data
data_set.describe(include=["O"]) # 注意这里是大写的O
个人认为Pandas包最为强大的一点是对于数据缺失值的处理,这个你会在之后简单的数据预处理之中碰到。为了获得到底有多少缺失值,每一个Feature的类型又是什么,我们可以用info方法来查看。
# See if there is any missing value
data_set.info()
在一些特殊的问题下我们可能还要知道相应的分布,这个实现真的非常简单,我们可以用DataFrame对象的value_counts+Plot来达到:
train_set.Survived.value_counts().plot(kind='bar')
以上这些都是非常简单的了解你数据的方法。我建议在ipython这种REPL环境中弄,当然如果是ipynb也很不错,ipynb的一个强大之处就在于他能让代码按块执行(区别于其他REPL环境的按行执行),执行后还能保存相应的结果,执行下一段代码的时候还不用重新训练(区别于Pycharm等IDE)。所以我强烈推荐。
(2). 了解数据与数据之间的关系
当你看到总体数据的一些特征以后,你恐怕对最后要选择的特征有一点assumption了,下面要做的就是讲这些assumption付诸实践。这里我们既可以使用DataFrame的方式,也可以用matplotlib或者Seaborn中的图像来展现我们的结果。
这里以Kaggle中Hello World级别的compe