dxzmpk

endless hard working

0%

Titanic利用集成学习得到不错的结果

特征工程

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
2
3
attribs=['Pclass','Name','Sex','Age','Ticket','Fare','Cabin','Embarked','SibSp','Parch']
num_attribs=['Pclass','Age_cat','Fare_cat',"Ticket_freq"]
cat_attribs=['Name','Sex','Cabin','Embarked','Family']

对于其中的类别属性cat_attribs,使用DataFrame的get_dummies()方法得到One-Hot编码。得到最终的属性集合:

1
2
3
4
5
Index(['Pclass', 'Ticket_freq', 'Age_cat', 'Fare_cat', 'Name_Miss', 'Name_Mr',
'Name_Mrs', 'Name_etc', 'Sex_female', 'Sex_male', 'Cabin_ABCT',
'Cabin_DE', 'Cabin_FG', 'Cabin_X', 'Embarked_C', 'Embarked_Q',
'Embarked_S', 'Family_1', 'Family_2', 'Family_3', 'Family_4'],
dtype='object')

类型转换

将DataFrame通过to_numpy()转换为矩阵

Choosing the right estimator

模型

作者使用了多个模型进行集成学习的方式。以SVC为例进行介绍:

首先使用cross_val_score对模型进行大致的估计

使用grid_search()确定参数C的大致范围,C是正则化参数,最终得到最好的模型

模型的集成

使用VotingClassifier的hard模式和soft模式还有StackingClassifier进行集成,得到最终的集成分类器。

结果

1
VotingClassifier__hard/StackingClassifier:0.83613917