特征工程
泰坦尼克号生还者预测比赛(Manav Sehgal):
train 数据(891)中有 12 个特征属性如下: PassengerId、Pclass、Name、Sex、
Age、SibSp、Parch、Ticket、Fare、Cabin、Embarked 以及标签 Survived。
其中 Age 缺失了 177 个值,Cabin 缺失了 687 个值,Embarked 缺失了 2 个值。
test 数据(418)中有 11 个特征属性: PassengerId、Pclass、Name、Sex、Age、
SibSp、Parch、Ticket、Fare、Cabin、Embarked。
其中 Age 缺失了 86 个值,Fare 缺失了 1 个值,Cabin 缺失了 327 个值。
数值型的数据(int,float): PassengerId、Pclass、Age、SibSp、Parch、Fare、
Survived。
类别型的数据(object): Name、Sex、Ticket、Cabin、Embarked。
分别分析 Pclass 、 Sex 、 SibSp 、 Parch 与 Survived 之间的相关性,这些
是从感觉上来的,毕竟仓位等级越高存活下来的可能性就越大,女性也应该会比男性更
有优势存活下来。利用 seaborn 将数据可视化后来观察其他属性与 Survived 之间的关
联性。
由于 Ticket 具有较高的重复率,而且可能跟 Survived 没有什么关联,所以这里
就删掉。( Ticket => X )
Cabin 这个属性由于在训练和测试数据中都缺失了很多,所以做删除处理。
( Cabin => X )
利用正则表达式将 Name 特征中的称呼抽出构成 Title 属性作为一个新的特征。由
于称呼 Master,Miss,Mr,Mis 占有较多的数量,于是将这些抽出来的 Title 归为五类:
Master,Miss,Mr,Mrs,Rare(将 Mlle,Ms 都归为 Miss;将 Mme 归为 Mrs;将其他的
稀有少数称呼都归为 Rare)。然后将提取出来的这五个属性利用 map()方法映射成 1,
2,3,4,5。之后就可以保留 Title 字段,删除 Name 属性。同时将 PassengerId 也
删除。( Name PassengerId => Title )
对 Age 字段进行如下转化操作:
因为 Sex 和 Pclass 和 Age 之间的关系比较近,所以利用 Sex 和 Pclass 的组合字段
所对应的 Age 的中位数来对缺失的数据进行填充。例如:Sex=1 & Pclass=1 =》
Age.medain() 去填充缺失数据中 Sex=1 & Pclass=1 对应的 Age 值。这里 Sex 和 Pclass
有六种组合{(0,1),(0,2),(0,3),(1,1),(1,2),(1,3)}。这是 Age 已经没