kaggle实战(二)泰坦尼克号生还人数预测

题目介绍

今天我们来讲kaggle比赛中最经典,也是官方最推荐入门机器学习的一项比赛——预测泰坦尼克号的生存人数。那么这个比赛在哪找呢?首先我们找到competitions的页面,然后可以看到根据比赛的类型有很多分类,那么我们可以想入门的话就可以选择GettingStarted类型。
kaggle实战(二)泰坦尼克号生还人数预测_第1张图片
那么我们在该类型中往下翻几页就可以找到这个比赛了。
在这里插入图片描述
我们点开比赛之后,在其中的overview里的description中可以看到这个比赛的条件和要求。
我们看到这段话的最后两句,“在该比赛中,我们需要你建立一个模型,利用我们给你的乘客信息来预测哪些人会更可能生存下来”
kaggle实战(二)泰坦尼克号生还人数预测_第2张图片

数据集

我们把数据集下载下来之后,先别急着写代码,先直观地看看表格中有哪些维度数据。
我打开的是训练集的数据集,我们可以看到乘客信息包括了乘客的姓名,舱位的等级,性别,年龄,一同上船的配偶和堂兄妹的数量(SibSp),一同上船的父母和子女数(Parch),船票的编号,船票的费用,船舱的编号,在哪个港口登的船(Embarked)。并且在训练集中也告诉了我们存活的情况(Survived),而这一栏的数据也就是我们要根据测试集的数据来预测的。
kaggle实战(二)泰坦尼克号生还人数预测_第3张图片

数据分析

在我们之前讲的第一题中,数据只有单纯的编号,没有实际的意义,所以我们可以无脑的把所有数据全部认为是影响因子。但是在这一题中,数据有了实际的意义,此时我们就要先考虑一下是否所有的数据都是影响因子。
我们这里要预测的是生还人数,所以我们看这些数据的时候,不妨思考一下哪些数据可能会影响到一个人的生存几率。像第一栏,乘客的ID,我觉得这个没啥讨论的价值,也造成不了影响。第三栏是船舱的等级,我觉得不用等级的船舱离甲板的距离应该不一样,所以是会对生存几率造成影响的。第四栏是每个人的名字,我觉得叫啥名字应该和你能不能生存下去没啥关系吧,所以也直接忽略这一栏。第五栏是每个人的性别,这一栏我们等会会专门讨论
第六栏和第七栏都是在说有没有亲人同时在船上,我觉得这毫无疑问是要考虑的。第八栏是船舱的编号,我觉得这里如果说告诉了我们哪个首字母开头的船舱离甲板更近则十分有讨论的必要,但是现在没有这个条件的话则可以直接忽略。最后一栏是乘客从哪个港口登船,我个人觉得是有必要讨论的。
为什么我们这里要单独讨论性别这个数据维度呢,因为在题目的数据集中,该题目单独给了我们一个gender_submiss的文件,在这个文件中,所有的女性都存活了下来,而男性全都没能够存活,其实也就是题目在暗示我们性别是个影响因素。那我们要怎么去看性别是否真的产生影响呢?
这里我们把训练集中所有女性都单独拎出来,并且用所有女性中生存的女性人数除以女性的总人数,我们最终得到了以下的结果,好象这样看,性别确实是会对存活率有影响的。
kaggle实战(二)泰坦尼克号生还人数预测_第4张图片

数据清洗

我们首先先看每个数据的大小应该是多少。我们利用.shape可以得出训练集的维度是891*12。
在这里插入图片描述
之后我们再根据数据的大小去判断每个维度的数据是否存在缺失值。我们可以通过**.info()函数看到训练集中每个维度数据是否存在缺失值,因为我们数据的长度是891,所以如果如果该维度数据也是891条数据,那么该维度的数据就不存在缺失值。所以我们可以看到,Age,Cabin,Embarked这三个维度的数据是存在缺失的。
kaggle实战(二)泰坦尼克号生还人数预测_第5张图片
既然存在了缺失值,那我们就要去对缺失值去做处理,因为代码直接处理缺失值的时候会报错。那么在这里给大家介绍一种最简单的缺失值的处理办法——把所有的缺失值都补充为0。
我们使用
.fillna()函数**对训练集进行处理。在处理之后我们可以看到所有的维度的数据长度都为891。
kaggle实战(二)泰坦尼克号生还人数预测_第6张图片

模型建造

我们首先把我们训练集中Survived一栏的数据提出来作为训练的标签,然后根据一开始我们所分析的影响因子来提取数据,接着我们采用随机森林算法来对数据进行拟合,并对测试集的数据进行预测。
我们这里还是按照上一次的方法,先把训练集的数据分成训练集和测试集,训练集用来拟合模型,测试集用来测试拟合程度,我们可以看到此时拟合度在82%左右,也还算可以。
kaggle实战(二)泰坦尼克号生还人数预测_第7张图片
最后,我们把该模型运用到真正的测试集上对结果进行预测,并把结果写成csv文件

kaggle实战(二)泰坦尼克号生还人数预测_第8张图片

复盘

总体下来觉得可以改进的地方有以下几点:
1.在对缺失值处理的过于草率,尤其是年龄那里,把缺失的年龄填充为0岁显然是有问题的,这也自然影响了正确率
2.还有就是算法的设计,这里我们是选择了随机森林,当然也可以使用其它的算法

你可能感兴趣的:(机器学习,python,kaggle)