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 条评论
登录 后参与评论

相关文章

来自专栏大数据挖掘DT机器学习

python常用可视化技巧

我们在对数据进行预处理时,常常需要对数据做一些可视化的工作,以便能更清晰的认识数据内部的规律。 这里我们以kaggle案例泰坦尼克问题的数据做一些常用的可视...

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

Google AI提新型神经网络,对神经元进行高精度自动重建

7 月 16 日, Google AI 发布了一篇博客称,Google Research 部门和 Max Planck 研究所合作提出了一种新型的递归神经网络,...

873
来自专栏塔奇克马敲代码

ECEF和大地坐标系的相互转化

2016
来自专栏有趣的Python

TensorFlow应用实战-10-GAN介绍

2054
来自专栏新智元

【NLP2005年以来大突破】语义角色标记深度模型,准确率提升10%

【新智元导读】被称为取得了NLP “2005 年以来首个大突破”的研究报告 Deep Semantic Role Labeling: What Works an...

3273
来自专栏量子位

为什么我的CNN石乐志?我只是平移了一下图像而已

一般来说,图像经过小小的平移和变形之后,人类还是信任CNN能够把它们泛化,识别出里面的物体。

1282
来自专栏一心无二用,本人只专注于基础图像算法的实现与优化。

《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果(速度可实时)

      最新的效果见 :http://video.sina.com.cn/v/b/124538950-1254492273.html         可处理...

55910
来自专栏人工智能头条

万圣节教你用 OpenCV Remix 一张 n 合1脸

在这个多逝之秋,禅师要哀悼一下金庸先生。昨晚上惊闻噩耗,顿感无比感慨。金庸先生的武侠,影响了好几代人。沧海一声笑,滔滔两岸潮。浮沉随浪只记今朝,先生一路走好!

852
来自专栏机器之心

计算语言顶会ACL 2018最佳论文公布!这些大学与研究员榜上有名

1. Finding syntax in human encephalography with beam search(尚未公开)

1180
来自专栏人工智能头条

用户在线广告点击行为预测的深度学习模型

3485

扫码关注云+社区