泰坦尼克之灾案例是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;
领取专属 10元无门槛券
私享最新 技术干货