问题简介、目标
问题简介:泰坦尼克号的沉没是历史上最重大的沉船事件之一。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模型准确率:
逻辑回归模型准确率:
模型选择
根据以上评估结果,我们决定采用决策树模型,来进行下一步的预测。期间通过可视化方法,直观了展示其中部分分析过程。