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

相关文章

来自专栏量子位

语音合成论文与韩国小哥“撞车”后续:英伟达“赶紧”把代码开源了

在得知自己的论文与英伟达的论文“撞车”之后,韩国小哥赶紧在arXiv上提交了论文。并在GitHub上放出了自己研究的源代码。

343
来自专栏人工智能头条

干货 | “后 Word Embedding 的”热点会在哪里?

1452
来自专栏AI研习社

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

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

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

Kaggle赛题解析:逻辑回归预测模型实现

作者: 寒小阳 &&龙心尘 原文:http://blog.csdn.net/han_xiaoyang/article/details/49797143 ...

35013
来自专栏CDA数据分析师

备战CDA数据分析竞赛!Kaggle赛题大揭秘

?‍ 01 关于泰坦尼克号之灾 带大家去该问题页面溜达一圈吧 下面是问题背景页 ? 泰坦尼克号问题之背景 就是那个大家都熟悉的『Jack and Rose...

2548
来自专栏量子位

干货分享 | 自然语言处理及词向量模型介绍(附PPT)

云脑科技机器学习训练营第二期,对自然语言处理及词向量模型进行了详细介绍,量子位作为合作媒体为大家带来本期干货分享~ 本期讲师简介 ? 樊向军 云脑科技核心算法工...

4027
来自专栏大数据文摘

不幸的人各有不幸吗?文本分析流浪汉乞讨标语牌后发现的套路(附代码)

2076
来自专栏生信宝典

贝叶斯学习记录

这篇文章用于记录学习贝叶斯定理及其应用过程中的记录,希望由浅及深的提供一份自我学习教程。 引子 概率的定义:概率是一个0-1之间的数,代表了我们对某个事实或预测...

1766
来自专栏Python中文社区

Kaggle机器学习实战总结

專 欄 ❈王勇,Python中文社区专栏作者,目前感兴趣项目商业分析、Python、机器学习、Kaggle。17年项目管理,通信业干了11年项目经理管合同交付...

2188
来自专栏AI科技评论

开发 | TOP5%Kaggler:如何在 Kaggle 首战中进入前 10%

Introduction Kaggle 是目前最大的 Data Scientist 聚集地。很多公司会拿出自家的数据并提供奖金,在 Kaggle 上组织数据竞赛...

5158

扫码关注云+社区