首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python机器学习案例-泰坦尼克之灾

泰坦尼克之灾案例是Kaggle入门的案例,本篇分析是参照https://github.com/Speedml/notebooks/blob/master/titanic/titanic-data-science-solutions-refactor.ipynb来写的,分析思路和代码很详细,本篇文章的代码地址https://github.com/LuLane/titanic;

一:确定任务和目标

首先先确定该案例是一个二类分类监督学习问题,根据乘客的特征来预测其是否能够生还;

七个工作流:

classifying(分类):将样本进行分类,理解不同类别和目标之间的关系;

Correlating(相关性):特征和目标值之间的关联性,特征之间的关联性;

Converting(转换):训练模型时,为了适用于模型算法,需要将特征转化为数值等效值,例如将文本类型转化为数值型;

Completing(完善):运用模型算法时,最好确定特征值中无缺失值,所以在数据准备阶段需要补全或删除缺失值;

Correcting(校验):分析给出的训练集,如果发现有错误的值,校正过来这些值或者剔除含有这些值的样本;

Creating(新建):根据已有的特征来创建新的特征;

Charting(制图):选择合适的图形来可视化;

二:数据准备

1.获取数据

数据可以从Kaggle官网https://www.kaggle.com/获取;

2.描述分析数据

利用DataFrame类型的 head()、describe()、info()等来查看数据集的基本格式、类型;

[‘PassengerId’ ‘Survived’ ‘Pclass’ ‘Name’ ‘Sex’ ‘Age’ ‘SibSp’ ‘Parch’ ‘Ticket’ ‘Fare’ ‘Cabin’ ‘Embarked’]

其中survived是目标值,0表示未生还,1表示生还;Pclass是舱次等级,sibsp是兄弟姐妹个数,parch是子女个数,Cabin是客舱,Embarked是登陆码头;

从这一步可以可以看出:

分类变量:survived, sex, embarked,

有序变量: pclass

数值变量:age, fare

分离变量:SibSp, Parch

混合变量:Ticket Cabin

包含空值的列:cabin,age,embarked;

另外,name是唯一的,sex性别有两种可能性,男性male占比65%,cabin有重复性,几个人可能共享一个cabin,embarked有3中可能性,其中3占比最高;

ticket有重复性;38%的乘客幸存了下来,>75%的乘客没有带父母和孩子(parch),fare票价相差很大;

3.根据数据分析来建立假设

根据以上分析可以先初步建立一些假设:

相关性:分析哪个变量和survive相关;

完整性:或许应该将age和embarked补充完整,age是一定和survived相关的,embarked也许和survived相关也许和另一个重要变量相关;

校验:ticket变量或许该去除,因为有较大的重复性,或许和survived关联不大;cabin变量应该去除,缺失值较多;passengerid应该去除,name变量格式不规范,对survived无影响,应该去除,但是可以从name中提取一些title字段,观察是否对幸存率有影响;

新建:可以造一个family变量,又sibsp和parch加总得到;可以造一个age bands(年龄段),将数字型转变为有序分类变量;可以造一个fare range,将将数字型转变为有序分类变量

分类:sex=female的更容易幸存;children(age

4.数据透视分析

为了确认我们的观察和假设,我们可以通过数据透视快速分析特征相关性;但是只能对分类、有序和离散变量应用,且变量值非空

例如:

从这一步可以看出,survived和Pclass、sex以及sibsp、parch有关;

5.可视化分析

利用图形来验证我们的假设

5.1 数值型-直方图

从图中可以看出,age在15-25之前的幸存率较低,5岁一下的幸存率较高;大部分的乘客都在15-35之间

因此决定:

将age纳入训练模型,后续需要补全age的空值,将age分段;

5.2 数值变量和有序变量之间

将多种变量结合起来展示,适用于数值型和有限个分类的分类变量;

可以观察到:

pclass=3的乘客最多,但幸存率最低,说明幸存与否和Pclass有关

在pclass=2和pclass=3的婴儿存活率较高;

在pclass=1的乘客大部门都幸存了下来;

在不同的Pcalss中年龄分布不同

结论:

将Pclass纳入训练模型

还有可视化分类变量之间的关联、分类变量和数值变量之间的关联,结论是Embarked变量和幸存率相关,除了在Embarked=C外,male的幸存率都比价低,也许Embarked变量不是直接作用域;票价越高,幸存率也越高,需要对票价进行分段,将票价区间段纳入训练模型;

6.处理数据

到目前为止我们总结了几个假设和决定,但还未对数据进行任何处理,

现在开始要根据上面的分析对数据进行规整,处理空值、创造新的变量、分类等;

6.1.校验数据-剔除无效特征

剔除无用的特征是第一步;根据我们的假设,我们将ticket和cabin两个变量剔除,

训练集和测试集都要去掉以保持一致性:

6.2.根据已有的变量来创建新的变量

例如根据Sibsp和parch来常见一个家庭成员变量;

6.3 将分类变量转化为数值型

模型算法不支持字符串类型,需要将分类变量转化为数值型;

例如将sex性别的female转化为1,male转化为0;

6.4补全缺失值(数值型)

补全缺失值,有3种方法:

1.简单的方法是在平均值和标准差之间产生随机数

2.更常见的做法是用其他相关的变量预估缺失值,在这个例子中age、sex和pclass相关,

用pclass和sex的特征组合的age中位数来预估该age的缺失值;

3.结合1和2,用平均值和标准差之间的随机数来代替中位数

示例为对age缺失值进行补全,后续还需要将age进行分段转化为分类变量;

6.5补全缺失值(分类变量)

embarked有两个缺失值,我们将频数最大的值进行填充,然后将embarked转化为数值型;

7.模型训练

数据处理好之后就可以进行模型训练了,因为我们的任务是一个二元分类回归问题,因此适用的模型算法有:

Logistic Regression/KNN/SVM/Naive Bayes Classifier/Decision Tree/Random Forrest/

preception/Artificial neural network/ Relevance Vector Machine or RVM

8.对模型进行评估

查看各模型的分类准确率:

random forest 和 decision tree 虽然分数一样,但是选择random forest,

因为random forest纠正了decision tree的过拟合问题

9.保存结果

完整分析和代码请参照https://github.com/LuLane/titanic;

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180209G12JLF00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券