特征工程
data: https://www.kaggle.com/c/titanic/data
notebook: https://www.kaggle.com/namylase/titanic-eda-full-pipeline-ensemble
预处理 增加特征
添加名字长度,
是否有舱位,
FamilySize为双亲加伴侣的数目+1,
当FamilySize大于1时IsAlone为0,否则为1,
Embarked填充空值为‘S’
Fare填充空值为中位数
train中CategoricalFare将Fare利用pd.qcut函数由大到小分为4个类别。
train中CategoricalAge利用pd.cut()将年龄分为5个类别。
Title是名称的前缀
Sex由female,male转化成类别编码1,2,title、Embarked也作相同操作。
Age,Fare根据范围也转化成类别型表示。
预处理 drop特征
train、test去除[‘PassengerId’, ‘Name’, ‘Ticket’, ‘Cabin’, ‘SibSp’]特征
train中还去除[‘CategoricalAge’, ‘CategoricalFare’]
特征可视化
使用Seaborn热图进行特征间相关性的可视化,最终得出的结论是所保留的特征相关性都比较低,也就是没有太多冗余的特征。
模型
- Random Forest classifier
- Extra Trees classifier
- AdaBoost classifer
- Gradient Boosting classifer
- Support Vector Machine
训练时使用Out-of-Fold Predictions的方法进行。
Out-of-Fold Predictions
通常机器学习算法训练时是通过重采样方法(K-fold)等来进行模型的评价的。在k折交叉验证中,预测是利用训练中没有使用的数据进行的。Out-of-Fold预测主要有两种作用:
- 估测模型在将来未知数据上的表现
- 拟合集成模型
估测模型在将来未知数据上的表现主要有两种方法:
- 在每折运算过后,计算模型的得分,最后进行平均。
- 在K折交叉运算中,每个训练样本都在测试集中出现恰好一次。将对其进行预测的结果收集起来,和真实的样本标签进行对比,得分即作为模型的表现,这个表现是通过整个训练数据集计算得到的。
拟合集成模型是Out-of-Fold的另一项重要应用。在K折交叉验证中,会生成K个基本模型。除此之外,一个更高阶的meta-model会通过基本模型的预测训练出来。这个模型的作用是学习如何更好地结合基本模型的方法。
- Meta-Model Input: Input portion of a given sample concatenated with the predictions made by each base model.
- Meta-Model Output: Output portion of a given sample.
得到Meta模型之后,在全部的训练数据集上训练每个基本模型,并用于之后的预测。
这个过程被称为stacked generalization。这里使用线性权值的方法得到Meta model,这个过程也被称为blending。
训练结果
使用5折交叉验证进行训练,对于每一个基本模型,在每一折训练后,用out-of-fold测试集进行测试,并将此模型在总体测试集上进行预测,将预测结果存在数组第二维中,最终测试结果在第一维取平均值,得到最终结果。
1 | for i, (train_index, test_index) in enumerate(kf): |
特征重要性可视化
将各特征在模型中的重要性提取出来,只有树类型的模型可以作此操作,也就是模型1—4。
模型的集成
利用XGBClassifier对模型进行集成。首先将第一步得到的所有模型训练集预测结果连接起来,对XGBClassifier进行训练。然后把相同方法处理得到的测试集输入进行预测,得到最终的结果。