打算用一下kaggle,试着做一下机器学习的项目,熟悉一下机器学习的步骤之类的。
希望在学期结束后,有一些进步就很好了。
第一个项目是titanic。项目目标是根据给定的数据集判断哪些人更有可能存活。
由于是第一个项目,对于要看什么,要做什么是七窍通六窍--一窍不通(哈哈哈烂梗),所以先看一个写的很细致的notebook。根据这个notebook走一遍,了解一下相应的流程和基本的代码。
使用的编程语言是python,机器学习库是sklearn。无论如何把常用的模型先import上。
首先观察源数据。
使用pandas导入数据,先看看这个dataframe的head是什么样的,这样起码我们能知道这个数据集到底有哪些feature。
不同类型的feature,可能会影响我们选择模型,那么下面看一下这些feature大概是什么样的。
['PassengerId' 'Survived' 'Pclass' 'Name' 'Sex' 'Age' 'SibSp' 'Parch' 'Ticket' 'Fare' 'Cabin' 'Embarked']
首先找到分类特征:比如sex、Survived...这些特征的特征(好像绕口令)是可以通过某些定性的属性将每个实体划分为有限类别中的一类。
序数特征:这种变量具有自然的有序类别,比如Pclass。
数值类的特征:这种特征通常使用数值来表示,可能是离散的比如SibSp(兄弟姐妹和配偶的数量,总不能是一半的人),也可能是连续的,比如fare。奇怪的是在参考文档里age也算是连续型变量,好吧的确如此,3岁零6个月也就是3.5岁呗。
除了不同特征的数据类型以外,还要注意哪些特征的取值中可能出现了错误或者缺失值的情况,如果存在这样的列,我们该怎么做。比如在Cabin这个特征的取值中,就有很多都是NaN。
我们可以查看不同feature的具体信息,比如非空值个数、数据类型等。也可以查看数值类特征的分布情况,比如查看Survived的比例,年龄的平均值之类的。
print(train_data.info()) #基本信息
print(train_data.describe()) #分布情况
看到了这些特征值之后,我们应该对这些特征值有所取舍。有些特征值我们需要进行完善,有些特征值我们需要舍弃,我们可能还要根据任务来添加一些新的特征值。
age:这个特征我们一定要进行完善,因为很明显age和survived存在关系。
cabin:这个特征可以舍弃,因为在train_data和test_data中都有太多缺失值了。
family_number:这是我们想要创建的新的特征值,因为与旅客同行的家人数量可能会影响Survived。在原数据集中有两个特征分别是SibSp和Parch,分别表示旅客的兄弟姐妹、配偶、父母和孩子的人数,那么直接把这两个特征的值加在一起,为family_number这个新创建的特征赋值好了。
age_band:源数据集中age可能有许多种情况,但是其实3岁还是4岁差别不大,那么就对于不同年龄段进行划分,将连续型的变量调整为序号型的变量。
对于特征记住3C:Complete(有用的去完善)、Correct(没用的舍弃)、Create(想用的去创造)。
除此之外,有的特征可以很直接地为我们提供简单的判断。比如当我们计算不同性别地生存比例的时候,可以发现70%以上的女性幸存了,那么就可以使用sex作为一个很好的分类特征。
遇到这种特征的时候我们就可以只考虑这个可用来分类的特征和任务目标之间的关系。比如我们可以计算一下sex和survive之间的关系:
print(train_data[['Sex','Survived']].groupby(['Sex'],as_index=False).mean().sort_values(by='Survived',ascending=False)) #as_index相当于是否在这个dataframe之前添加一列索引值。默认值是True即不添加,那么在我们查找数据的时候只能使用df.loc['female']的形式,设置为false的话就可以使用df.loc[0]来返回值。
通过对sex、Pclass、SibSp和Parch等分类特征的计算,可以看出和survived关系较大的特征有Sex和Pclass。其他两个没什么稳定的联系。