特征工程
data: https://www.kaggle.com/c/titanic/data
notebook: https://www.kaggle.com/namylase/titanic-eda-full-pipeline-ensemble
填充空值
将Embarked补充为出现次数最多的值
将Fare的空值补充为相同舱位Fare的中位数
将Age的空值补充为相同舱位Age的中位数
特征提取
建立家庭特征,为姐妹和伴侣的集合
df[‘SibSp’]+df[‘Parch’]+1 | Family |
---|---|
1 | 1 |
[2,4] | 2 |
[5,6] | 3 |
else | 4 |
去除SibSp, Parch, PassengerId等特征,同时也去除目标值Survived。
Ticket转换成Ticket_freq, 并去除Ticket特征。
Cabin提取首字母(代表舱位号),并进行聚类,分为ABCT, DE, FG。
提取名称中带的Mrs等前缀,作为新的Name特征。
将Age, Fare 装箱,即将连续值映射成离散值Age_cat, Fare_cat, 并去除Age和Fare特征
最终将属性值分类如下:
1 | attribs=['Pclass','Name','Sex','Age','Ticket','Fare','Cabin','Embarked','SibSp','Parch'] |
对于其中的类别属性cat_attribs,使用DataFrame的get_dummies()方法得到One-Hot编码。得到最终的属性集合:
1 | Index(['Pclass', 'Ticket_freq', 'Age_cat', 'Fare_cat', 'Name_Miss', 'Name_Mr', |
类型转换
将DataFrame通过to_numpy()转换为矩阵
模型
作者使用了多个模型进行集成学习的方式。以SVC为例进行介绍:
首先使用cross_val_score对模型进行大致的估计
使用grid_search()确定参数C的大致范围,C是正则化参数,最终得到最好的模型
模型的集成
使用VotingClassifier的hard模式和soft模式还有StackingClassifier进行集成,得到最终的集成分类器。
结果
1 | VotingClassifier__hard/StackingClassifier:0.83613917 |