开源地址见Github:https://github.com/datawhalechina/team-learning
模型融合
详细参考 https://cloud.tencent.com/developer/article/1614539
1. 简单加权融合:
- 回归(分类概率):算术平均融合(Arithmetic mean),几何平均融合(Geometric mean);
- 分类:投票(Voting)
2. boosting/bagging(在xgboost,Adaboost,GBDT中已经用到):
- 多树的提升方法
3. stacking/blending:
- 构建多层模型,并利用预测结果再拟合预测。
-
stacking
- 训练
- 预测
- 训练
-
blending
- 首先将训练集划分为两部分(d1,d2),例如d1为4000条数据用于blending的第一层,d2是6000条数据用于blending的第二层。
- 第一层:用d1训练多个模型,将其对d2和test的预测结果作为第二层的New Features。例如同样适用上述三个模型,对d2生成60003的新特征数据;对test生成30003的新特征矩阵。
- 第二层:用d2的New Features和标签训练新的分类器,然后把test的New Features输入作为最终的测试集,对test预测出的结果就是最终的模型融合的值。
-
stacking/blending的优缺点对比
Blending的优点在于:
-
比stacking简单(因为不用进行k次的交叉验证来获得stacker feature)
-
避开了一个信息泄露问题:generlizers和stacker使用了不一样的数据集
-
在团队建模过程中,不需要给队友分享自己的随机种子
而缺点在于:
-
使用了很少的数据来进行第一节段的数据的基模型的训练(是划分hold-out作为测试集,并非cv)
-
blender可能会过拟合(其实大概率是第一点导致的)
-
stacking使用多次的CV会比较稳健,说白了,训练次数少
5.5 思考题
1. 如何基于stacking改进出blending?
答:
- stacking使用了foldCV,blending使用了holdout.
- 在第一层中,stacking留出一部分数据扔到第二层参与新特征的提取和训练。
2. stacking还可以进行哪些优化提升F1-score - 从第一层模型数量?模型差异性?角度出发
答:
- F1 Score兼顾了精确率和召回率,在样本缺少平衡性时可以发挥有效的评价作用
- 从第一层模型数量来看,不同的模型数量越多,模型差异性越大,多个模型的综合输出结果的泛化能力越强 (接下点)
- 模型差异性越大,多个模型可以在数据的凸函数上从不同的方向进行梯度下降,进而逼近全局的最优解,stacking的效果越好,有利于保持精确率的程度下提高召回率