kaggle数据挖掘,泰坦尼克预测生存率

问题简介、目标

问题简介:泰坦尼克号的沉没是历史上最重大的沉船事件之一。1912 年 4 月 15 日,在她的处女航中,被广泛认为“永不沉没”的泰坦尼克号在与冰山相撞后沉没。不幸的是,没有足够的救生艇供船上的每个人使用,导致2224名乘客和船员中有1502人死亡。虽然生存有一些运气因素,但似乎有些人群比其他人更有可能生存。

目标:通过综合分析乘客的各类特征对幸存与否的影响,通过机器学习建立并选择最优模型,对test数据集中乘客的生存进行预测,生成csv文件。

问题分析流程设计

泰坦尼克号生存预测问题思维导图

流程图

问题分析实现步骤

数据集初步探索

数据集获取

通过pandas库中的read方法读取train和test中的数据

为了方便数据的处理,我们为train_csv和test_csv设置索引

我们将两个数据集拼接在一起,方便我们对数据进行后续处理。

如图所示为数据读取的结果

数据集基本情况分析

如图所示为数据集的读取情况,从图中可知,数据集初步分为survived,pclass,name,sex,age,sibsp,parch,ticket,fare,cabin,emarked11个特征,3个float型变量,3个int型变量,5个object型变量。内存占用为122.7+KB。从Non-Null列中得知,Pclass,Name,Sex,SibSp,Parch,Ticket数据共1309,无缺失,而Survived,Age,Embarked,Fare数据有缺失。

数据预处理

(1)拆分数据集:采用5次K折交叉验证,所以没有对训练集进行拆分

(2)缺失特征数据处理

survived的缺失忽略,有缺失值的为Age,Embarked,Fare,Cabin

对Age的填充

如图所示,为对Age数据的填充。Age的缺失值较多,我们通过按Pclass、Sex对数据集进行分组,填充时根据不同分组的中位数来填。中位数更能反映一个类别人群的平均年龄,平均数容易受到极个别噪点数据的影响,所以不选择平均数填充。

对Fare的填充

如图所示,为对Fare的填充。Fare缺失较多。我们通过按Pclass、Sex对Fare进行分组,填充时根据不同分组的中位数来填。中位数更能反应一个类别人群的平均票价,平均数容易受到极个别噪点数据的影响,所以不选择平均数填充。

对Embarked的填充

如图所示,为对Embarked的填充。Embarked只有一个缺失,直接用所有Embarked数据的中位数来填值。

对Cabin的填充

如图所示,Cabin的缺失率为77.4637%,我们认为Cabin的缺失率过高,非常容易产生噪点,所以我们决定不研究Cabin,将Cabin特征删除。

(3)特征转化

Sex和Embarked为object类变量,我们要对其进行哑变量处理,使其变为int型变量。

如图所示,我们将Sex中的女性设置为0,男性设置为1,将Embarked用数字0,1,2来表示

Pclass代表着乘客所坐的客舱类别,用1,2,3....代表类别

(4)特征提取、优化

Pclass、Sex、Embarked、SlibSp、Parch、Survived的存活与死亡的数据的可视化

如图所示为 Pclass、Sex、Embarked、SlibSp、Parch、Survived的存活与死亡的数据可视化的代码部分,这里,我们运用的是seaborn库,因为运用matplotlib库的可视化编写过于复杂,需要自己设置的参数很多,所以在这里我们运用了更为简洁的seaborn库

如上图所示为Pclass、Sex、Embarked、SlibSp、Parch、Survived的存活与死亡的数据的可视化

Pclass、Sex、Embarked、SlibSp、Parch、Survived的Sex数据可视化

如上图为Pclass、Sex、Embarked、SlibSp、Parch、Survived的Sex数据可视化的代码实现部分

如上图为Pclass、Sex、Embarked、SlibSp、Parch、Survived的Sex数据可视化

Age分布数据的可视化

如图所示为Age分布数据的可视化代码实现部分

如图所示为Age分布数据的可视化

Age分组数据的可视化

如图所示为Age分组数据的可视化代码实现部分

如图所示为Age分组数据的可视化

Fare的分类数据可视化

如图所示为Fare的分类数据可视化代码实现部分

如图所示为Fare的分类数据可视化

新建列FamilySize数据可视化

如图所示为新建列FamilySize数据可视化代码实现部分,我们把Prach和SibSp相加得到了FamilySize数据。

如图所示为新建列FamilySize数据可视化

FamilySize分组后的数据可视化

如图所示为FamilySize分组后的数据可视化代码实现部分,我们将FamilySize分为,单人,小,中,大,四组,并分别为其编号,单人(0),小(1),中(2),大(3)。

如图所示为FamilySize分组后的数据可视化

各个特征(Age、Ticket、FamilySize、FSurvivalRate、Sex_ 0、Sex_ 1、Fare_ 0、Fare_1、Fare_ 2、Fare_ 3、Pclass_ 1、Pclass_ _2、Pclass_ _3)相关系数图

如图所示为各个特征(Age、Ticket、FamilySize、FSurvivalRate、Sex_ 0、Sex_ 1、Fare_ 0、Fare_1、Fare_ 2、Fare_ 3、Pclass_ 1、Pclass_ _2、Pclass_ _3)相关系数图代码实现部分

如图所示为各个特征(Age、Ticket、FamilySize、FSurvivalRate、Sex_ 0、Sex_ 1、Fare_ 0、Fare_1、Fare_ 2、Fare_ 3、Pclass_ 1、Pclass_ _2、Pclass_ _3)相关系数图

各个特征值的重要性数据可视化(图像显示前六个)

如图所示为各个特征值的重要性数据可视化代码实现部分

如图所示为各个特征值的重要性数据可视化

对Name的处理

Name中最常见的是Mrs,Miss,Master,所以我们另外创建一个Rare,并把其他的名字放入Rare中

我们按照姓氏分类,分为五类,并把Title转化为离散型变量,并为其赋值0,1,2,3,4

SibSp与Parch的特征分析

我们根据家庭的人数多少,把家庭的大小分为4类。

Ticket特征分析

发现含有字母与不含字母的全票存活率相差很大,含有字母的ticket对应的乘客存活率低

把含有字母的ticket变为0

 Woman or Child特征分析

女人or孩子的存活率相对较高,单独作为一个特征

新建列Family_TotalCount, Family_SurviviedCount和Family_SurvivalRate

Family_ TotalCount 使用lambda函数在LastName、PClass和Ticked检测家庭的基础上对WomChi列进行计数,然后用布尔过程减去相同的乘客,该乘客是妇女或L童。Family_ SurvivedCount 也使用lambda函数对WomChi列求和,然后使用掩码函数过滤器(如果乘客是妇女或儿童)减去生存状态,最后一个Family_ surviwalrate 仅除以Family_ SurvivedCount 和Family_ _TotalCount。

构建分类器

我们创建新的一个类来细分特征处理Sex、Fare、Pclass

我们发现部分数据非常容易产生噪点如Name、LastName、WomChi、Family_TotalCount, Family_SurviviedCount,Embarked,Title,我们决定将其删除。

 构建分析模型及预测

模型构建和验证

基于分析任务,选取了决策树模型,并进行了标准化处理和模型构建。

标准化处理:

决策树模型:

随机森林模型:

SVC模型:

逻辑回归模型:

模型评估

在实验过程中,我们选取了可行的验证方法,并进行了多个模型的验证,得到了验证结果。

决策树模型准确率:

随机森林模型准确率:

SVC模型准确率:

逻辑回归模型准确率:

 模型选择

根据以上评估结果,我们决定采用决策树模型,来进行下一步的预测。期间通过可视化方法,直观了展示其中部分分析过程。

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值