大家都熟悉的『Jack and Rose』的故事,豪华游艇倒了,大家都惊恐逃生,可是救生艇的数量有限,无法人人都有,副船长发话了『lady and kid first!』,所以是否获救其实并非随机,而是基于一些背景有rank先后的。
训练和测试数据是一些乘客的个人信息以及存活状况,要尝试根据它生成合适的模型并预测其他人的存活状况。
本文介绍特征工程的一些思考方法,说明特征工程对于预测结果的提升的重要性。
1.导入一些必要的库
2.读取训练/测试数据
3.读取数据对数据有一定认识
4.数据分析
数据共891行,12列数据,有用特征11列,还有1个标签列,其中PassengerId只是数据标号,"Survivrd"特征是标签
Survived:是否生存 1表示存活,0表示未生存
1.PassengerId:乘客编号,无用数据
2.Pclass:乘客等级 1/2/3等舱
3.Name:乘客姓名
4.Sex:性别 male:男性,female:女性
5.Age:年龄
6.SibSp:堂兄/妹个数
7.Parch:父母与小孩个数
8.Ticket:船票信息
9.Fare:票价
10.Cabin:客舱
11.Embarked:登船港口
数值型特征:1.Pclass 2.Age 3.SibSp 4.Parch 5.Fare
文本型特征:1.Name 2.Sex 3.Ticket 4.Cabin 5.Embarked
1.训练数据:
数据共891行
缺省值:1.Age(差15%左右) 2.Cabin(差70%左右) 3.Embarked(差两个)
2.测试数据:
数据共418行,没有标签Survived,特征和训练数据一样都是10个
缺省值:1.Age(差20%) 2.Cabin(差60%) 3.Fare(差一个)
5.特征处理
Age
1.存在缺省值,需要填充
2.数据种类多,需要区间划分分类
1)观察数据
2)分析数据,采取策略
观察数据,可以看出age主要集中在中间段。
1.缺省值采用随机数填充;
2.划分14|20|30|40|50|60。
3)验证数据划分是否正确
Cabin 客舱信息
客舱信息丢失很多,采用均值填充都不是好办法,所以将"客舱信息"丢失与否进行分类,新增加一项特征“Has_Cabin”。
Fare 票价
票价训练集仅缺少一个,采用均值填充
1)数据填充
2)数据观察
数据都主要集中在左侧,需要对数据进行归一化处理,利用log。
3)归一化处理
4)再分类
不同区间票价进行分类
5)验证观察数据
当票价偏低时,生存几率小;
当票价为中间时,生存几率提高;
当票价大时,生存几率更大。
Embarked登船港口
训练数据有两个缺失值,需要填补
1)观察数据
Embarked 中,“S”居多,采用多数进行填充;
其次,需要将其数值化,便于计算。
2)填充并数值化处理
3)数据查看
Name名字
1)观察数据
2)没有规律,挖掘规律
观察到名字中间的称呼是不一样的,有Miss,Mr等,因此提炼出新的特征“Title”。
3)抽取数据
4)观察数据
5)减少特征所对应分类
对出现比较多的前缀进行映射,"Mr":1,"Miss":2,"Mrs":3,"Master":4,"Dr":5 ,"Rev":6,其他为0。
Sex性别
需要数值化处理
1)观察数据
2)数值化处理
3)观察数据
Parch 父母和小孩个数
SibSp 堂兄弟/妹个数
通过上述两个特征发现,存在一个父母小孩和堂兄堂妹都没有的乘客,因此可以判断乘客是否是孤独一人,创建一个新的特征“Alone”
Parch ,SibSp ->Alone
1)创建新特征
根据Parch,SibSp都为0来确定是否为Alone
2)观察数据
看下目前所有特征情况
5.特征选择与预测
选择不同数量的特征,对于结果的影响
["Pclass",'Title','Sex','Age','Parch','Fare','Embarked','Has_Cabin','SibSp','Alone']
1)创建特征列表
2)观察特征的相关性
3)创建训练算法函数
4)实验增加特征
看出增加特征,训练准确度提升了。
5)函数完成特征增加
6)图示
总结:
通过对特征的分析整理,采用同样的算法,对特征的进行选择,准确度不断提升。
这就是特征工程的魅力,也是机器学习的关键。以后完成的有趣项目再给大家分享。
领取专属 10元无门槛券
私享最新 技术干货