根据TITANIC数据构建生存情况预测模型

本文章是根据Titanic中的train数据集构建对survival情况的预测模型,并对test数据集进行预测,本次使用的模型实现工具为python,其中使用到的python工具为pandas、numpy、matplotlib、sklearn。下面开始具体说明实验内容:

一、查看数据的基本信息

代码:
在这里插入图片描述
结果:
在这里插入图片描述

这12列数据中,有9列数据是完整的,即有891条记录;
Embarked这一列,数据缺失了两条;
Age这一列,差了一百多条数据;
Cabin这一列,数据很不完整,只有204条记录。

二、处理缺失值

(1)如果数据集很多,但有很少的缺失值,可以删掉带缺失值的行;
(2)如果该属性相对学习来说不是很重要,可以对缺失值赋均值或者众数。比如在哪儿上船Embarked这一属性(共有三个上船地点),缺失俩值,可以用众数赋值
(3)对于标称属性,可以赋一个代表缺失的值,比如‘U0’。因为缺失本身也可能代表着一些隐含信息。比如船舱号Cabin这一属性,缺失可能代表并没有船舱。
(4)使用回归 随机森林等模型来预测缺失属性的值。因为Age在该数据集里是一个相当重要的特征(先对Age进行分析即可得知),所以保证一定的缺失值填充准确率是非常重要的,对结果也会产生较大影响。一般情况下,会使用数据完整的条目作为模型的训练集,以此来预测缺失值。对于当前的这个数据,可以使用随机森林来预测也可以使用线性回归预测。这里使用随机森林预测模型,选取数据集中的数值属性作为特征(因为sklearn的模型只能处理数值属性,所以这里先仅选取数值特征,但在实际的应用中需要将非数值特征转换为数值特征)
代码:

在这里插入图片描述
结果:
在这里插入图片描述

三、乘客属性分布

代码:
在这里插入图片描述

结果图:
在这里插入图片描述
从上面的几个图可以看出:
遇难人数占一大半;
三等舱位的乘客最多,按照出行常识,应该是三等舱座位多价格便宜;
多数人从S口上船,是不是可以推测:S口就是普通登船口,C口和Q口是不是专用登船口
三等舱人数 > 二等舱人数 > 一等舱人数,头等舱乘客年龄 > 二等舱乘客年龄 > 三等舱乘客年龄,这是因为年龄越大,财富越多,越倾向于买高档的舱位。
二、三等舱多数人的年龄介于20~40之间,并且二三等舱人数比较多,这可以和平均年龄29.7岁相呼应。

四、舱位等级与生存的关联

代码:
在这里插入图片描述
结果图:
在这里插入图片描述

头等舱的获救机会 > 二等舱的获救机会 > 三等舱的获救机会。说明越有钱,买的舱位越好,获救概率越高

五、舱位等级结合性别的获救情况

代码:
在这里插入图片描述

结果图:
在这里插入图片描述
明显可以看出,坐头等舱的女性获救的概率接近100%,坐二三等舱的女生获救概率接近50%。男性无论是坐头等舱还是二三等舱,获救概率都比较低,尤其是坐二三等舱获救的概率更低。

六、数据预处理

(一)Cabin和Age预处理
Cabin可以按上面的分析,先处理成Yes和No两种类型
Age根据已有的值,拟合一下数据,补充上。用scikit-learn中的随机森林方法(RandomForest)来拟合一下缺失的年龄数据
代码:

在这里插入图片描述

结果:
在这里插入图片描述
(二)特征因子化
因为逻辑回归建模时,需要输入的特征都是数值型特征,我们通常会先对类目型的特征因子化。
Cabin处理成Cabin_Yes和Cabin_No,Embarked处理成Embarked_C、Embarked_Q和Embarked_S,Sex处理成Sex_Male和Sex_Female,Pclass处理成Pclass_1、Pclass_2和Pclass_3;
接着用concat函数将这些新的属性连接到dataframe中,再通过drop函数将原先的Pclass、Name、Sex、Ticket、Cabin和Embarked这六个属性从dataframe中去掉。

代码:
在这里插入图片描述
结果:
在这里插入图片描述
(三)数据标准化
Age和Fare这两个属性的数据取值范围太大,这将对逻辑回归的收敛造成不利的影响。处理方法是将其标准化。
标准化就是将特征数据的分布调整成标准正太分布,也叫高斯分布,也就是使得数据的均值为0,方差为1。
代码:
在这里插入图片描述
结果:
在这里插入图片描述

七、建立模型

把需要的特征字段取出来,转成numpy格式,使用scikit-learn中的LogisticRegression来生成模型
代码:
在这里插入图片描述

结果:

在这里插入图片描述

八、对测试数据集进行预处理

测试集预处理的过程和训练集的预处理过程一样
代码:

在这里插入图片描述

结果:

在这里插入图片描述

九、预测

代码:
在这里插入图片描述
结果:

在这里插入图片描述

十、模型系数分析

把模型系数和特征关联起来
代码:
在这里插入图片描述
结果:
在这里插入图片描述

十一、交叉验证

交叉验证通常是把train.csv分成两部分,一部分用于训练模型,另外一部分数据用来预测结果,然后将预测结果与实际结果比较,这样就能知道模型的预测效果。
用scikit-learn的cross_validation来完成这个工作,看一下我们的预测准确度:
在这里插入图片描述
把测试集分成五份,来相互验证,结果:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值