Kaggle Titanic 生存预测比赛超完整笔记(中)

本文作者大树先生,首发于作者的知乎专栏《机器学习之路》, AI研习社获其授权发布。

一直想在Kaggle上参加一次比赛,奈何被各种事情所拖累。为了熟悉一下比赛的流程和对数据建模有个较为直观的认识,断断续续用一段时间做了Kaggle上的入门比赛:Titanic: Machine Learning from Disaster。

总的来说收获还算是挺大的吧。本来想的是只简单的做一下,在整个进行的过程中发现有很多好的Kernels以及数据分析的流程和方法,但是却鲜有比较清晰直观的流程和较为全面的分析方法。所以,本着自己强迫症的精神,同时也算对这次小比赛的一些方式方法以及绘图分析技巧做一个较为系统的笔记,经过几天快要吐血的整理下,本文新鲜出炉。

本文参考了若干kernels以及博客知文,文章下方均有引用说明。

5. 特征工程

在进行特征工程的时候,我们不仅需要对训练数据进行处理,还需要同时将测试数据同训练数据一起处理,使得二者具有相同的数据类型和数据分布。

对数据进行特征工程,也就是从各项参数中提取出对输出结果有或大或小的影响的特征,将这些特征作为训练模型的依据。

一般来说,我们会先从含有缺失值的特征开始。

(1) Embarked

因为“Embarked”项的缺失值不多,所以这里我们以众数来填充:

对于三种不同的港口,由上面介绍的数值转换,我们知道可以有两种特征处理方式:dummy和facrorizing。因为只有三个港口,所以我们可以直接用dummy来处理:

(2) Sex

对Sex也进行one-hot编码,也就是dummy处理:

(3) Name

首先先从名字中提取各种称呼:

将各式称呼进行统一化处理:

使用dummy对不同的称呼进行分列:

增加名字长度的特征:

(4) Fare

由前面分析可以知道,Fare项在测试数据中缺少一个值,所以需要对该值进行填充。

我们按照一二三等舱各自的均价来填充:

下面transform将函数np.mean应用到各个group中。

通过对Ticket数据的分析,我们可以看到部分票号数据有重复,同时结合亲属人数及名字的数据,和票价船舱等级对比,我们可以知道购买的票中有家庭票和团体票,所以我们需要将团体票的票价分配到每个人的头上。

使用binning给票价分等级:

对于5个等级的票价我们也可以继续使用dummy为票价等级分列:

(5) Pclass

Pclass这一项,其实已经可以不用继续处理了,我们只需要将其转换为dummy形式即可。

但是为了更好的分析问题,我们这里假设对于不同等级的船舱,各船舱内部的票价也说明了各等级舱的位置,那么也就很有可能与逃生的顺序有关系。所以这里分出每等舱里的高价和低价位。

同时,我们将 Pclass 特征factorize化:

(6) Parch and SibSp

由前面的分析,我们可以知道,亲友的数量没有或者太多会影响到Survived。所以将二者合并为FamliySize这一组合项,同时也保留这两项。

(7) Age

因为Age项的缺失值较多,所以不能直接填充age的众数或者平均数。

常见的有两种对年龄的填充方式:一种是根据Title中的称呼,如Mr,Master、Miss等称呼不同类别的人的平均年龄来填充;一种是综合几项如Sex、Title、Pclass等其他没有缺失值的项,使用机器学习算法来预测Age。

这里我们使用后者来处理。以Age为目标值,将Age完整的项作为训练集,将Age缺失的项作为测试集。

建立Age的预测模型,我们可以多模型预测,然后再做模型的融合,提高预测的精度。

利用融合模型预测的结果填充Age的缺失值:

(8) Ticket

观察Ticket的值,我们可以看到,Ticket有字母和数字之分,而对于不同的字母,可能在很大程度上就意味着船舱等级或者不同船舱的位置,也会对Survived产生一定的影响,所以我们将Ticket中的字母分开,为数字的部分则分为一类。

(9) Cabin

因为Cabin项的缺失值确实太多了,我们很难对其进行分析,或者预测。所以这里我们可以直接将Cabin这一项特征去除。但通过上面的分析,可以知道,该特征信息的有无也与生存率有一定的关系,所以这里我们暂时保留该特征,并将其分为有和无两类。

特征间相关性分析

我们挑选一些主要的特征,生成特征之间的关联图,查看特征与特征之间的相关性:

特征之间的数据分布图

输入模型前的一些处理:

1. 一些数据的正则化

这里我们将Age和fare进行正则化:

2. 弃掉无用特征

对于上面的特征工程中,我们从一些原始的特征中提取出了很多要融合到模型中的特征,但是我们需要剔除那些原本的我们用不到的或者非数值特征。

首先对我们的数据先进行一下备份,以便后期的再次分析:

3. 将训练数据和测试数据分开:

以上代码输出结果:(891, 32)

(未完待续)

本文来自企鹅号 - AI研习社媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏思影科技

大话脑成像之十三:浅谈标准空间模板和空间变换

1765
来自专栏贾志刚-OpenCV学堂

OpenCV基于DLCO描述子匹配

2014年VGG发表了一篇基于凸优化的局部特征描述子学习(DLCO)的论文,OpenCV3.2以后在扩展模块中对该论文的完成了代码实现并发布了API支持,提供了...

733
来自专栏编程

不用@微信官方,教你写头像戴圣诞帽的程序

前两天朋友圈里面刷屏的“我想要一个圣诞帽,@微信官方”这个活动你们中招了吗?后来大家都知道这只是一个用了P图工具的小玩笑,但大家纷纷玩得不亦乐乎。现在有许多p图...

1888
来自专栏李海辰的专栏

Unity 5.6 光照烘焙系统介绍

Unity 一直致力于解决混合光照的问题,在Unity 5.6 Beta 2版本中加入了不断改进后的功能。本文将为大家分享光照烘焙系统介绍。

1.4K2
来自专栏机器学习算法与理论

利用二维图像进行头部姿态估计

3D头部姿态估计(ubuntu操作系统,基于opencv3.2+Dlib19.4+python2.7)打开摄像头,可实现实时(realtime)姿态检测。 坐标...

3675
来自专栏我是攻城师

海量数据去重之SimHash算法简介和应用

3599
来自专栏开源FPGA

基于MATLAB的RGB转YCBCR色彩空间转换

  使用MATLAB进行图片的处理十分方便,看它的名字就知道了,矩阵实验室(matrix laboratory)。一副图片的像素数据可以看成是一个二维数组一个大...

702
来自专栏AI科技大本营的专栏

课程 |《深度学习原理与TensorFlow实践》学习笔记(二)

作者 | 王清 TensorFlow基础使用 环境准备 TensorFlow安装 常用Python库介绍 实例解析 Kaggle平台及Titanic题目介绍 代...

3478
来自专栏人工智能LeadAI

译文 | 简明 TensorFlow 教程:混合模型

确保你已经阅读了第一部分(http://camron.xyz/index.php/2016/08/22/in_a_nutshell_part_one/) 在本文...

3986
来自专栏进击的程序猿

如何构建一个简单的神经网络如何构建一个简单的神经网络

最近报名了Udacity的深度学习基石,这是介绍了第二部分神经网络入门,第一篇是线性回归背后的数学. 本文notebook的地址是:https://githu...

923

扫码关注云+社区