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

预处理 增加特征

添加名字长度,

是否有舱位,

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热图进行特征间相关性的可视化,最终得出的结论是所保留的特征相关性都比较低,也就是没有太多冗余的特征。

模型

  1. Random Forest classifier
  2. Extra Trees classifier
  3. AdaBoost classifer
  4. Gradient Boosting classifer
  5. Support Vector Machine

训练时使用Out-of-Fold Predictions的方法进行。

Out-of-Fold Predictions

通常机器学习算法训练时是通过重采样方法(K-fold)等来进行模型的评价的。在k折交叉验证中,预测是利用训练中没有使用的数据进行的。Out-of-Fold预测主要有两种作用:

  • 估测模型在将来未知数据上的表现
  • 拟合集成模型

估测模型在将来未知数据上的表现主要有两种方法:

  1. 在每折运算过后,计算模型的得分,最后进行平均。
  2. 在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
2
3
4
5
6
7
8
9
10
11
12
for i, (train_index, test_index) in enumerate(kf):
x_tr = x_train[train_index]
y_tr = y_train[train_index]
x_te = x_train[test_index]

clf.train(x_tr, y_tr)

oof_train[test_index] = clf.predict(x_te)
oof_test_skf[i, :] = clf.predict(x_test)
# 取平均、返回结果
oof_test[:] = oof_test_skf.mean(axis=0)
return oof_train.reshape(-1, 1), oof_test.reshape(-1, 1)

特征重要性可视化

将各特征在模型中的重要性提取出来,只有树类型的模型可以作此操作,也就是模型1—4。

模型的集成

利用XGBClassifier对模型进行集成。首先将第一步得到的所有模型训练集预测结果连接起来,对XGBClassifier进行训练。然后把相同方法处理得到的测试集输入进行预测,得到最终的结果。