5.1 模型融合目标
- 对于多种调参完成的模型进行模型融合
- 完成对于多种模型的融合
5.2 内容介绍
模型融合是比赛后期一个重要的环节,大体来说有如下的类型方式。
1、简单加权融合:
- 回归(分类概率):算术平均融合(Arithmetic mean),几何平均融合(Geometric mean)
- 分类:投票(Voting)
- 综合:排序融合(Rank averaging),log融合
2、stacking/blending:
- 构建多层模型,并利用预测结果再拟合预测。
3、boosting/bagging(在xgboost,Adaboost,GBDT中已经用到):
- 多树的提升方法
5.3 Stacking相关理论介绍
简单来说 stacking 就是当用初始训练数据学习出若干个基学习器后,将这几个学习器的预测结果作为新的训练集,来学习一个新的学习器。
将个体学习器结合在一起的时候使用的方法叫做结合策略。对于分类问题,我们可以使用投票法来选择输出最多的类。对于回归问题,我们可以将分类器输出的结果求平均值。
上面说的投票法和平均法都是很有效的结合策略,还有一种结合策略是使用另外一个机器学习算法来将个体机器学习器的结果结合在一起,这个方法就是Stacking。
在stacking方法中,我们把个体学习器叫做初级学习器,用于结合的学习器叫做次级学习器或元学习器(meta-learner),次级学习器用于训练的数据叫做次级训练集。次级训练集是在训练集上用初级学习器得到的。
5.4代码示例
5.4.1 回归/分类概率-融合
- 简单加权平均,结果直接融合
这里通过三个模型对样本进行预测,并得到三个模型的MAE。 - Stacking融合(回归)
5.4.2 分类模型融合
-
对于分类,同样的可以使用融合方法,比如简单投票,Stacking…
1、Voting投票机制:分为软投票和硬投票两种,其原理采用少数服从多数的思想。
2、分类的Stacking\Blending融合 stacking是一种分层模型集成框架: -
1)以两层为例,第一层由多个基学习器组成,其输入为原始训练集,第二层的模型则是以第一层基学习器的输出作为训练集进行再训练,从而得到完整的stacking模型, stacking两层模型都使用了全部的训练数据。
-
2)Blending,其实和Stacking是一种类似的多层模型融合的形式:
-
其主要思路是把原始的训练集先分成两部分,比如70%的数据作为新的训练集,剩下30%的数据作为测试集。
-
在第一层,我们在这70%的数据上训练多个模型,然后去预测那30%数据的label,同时也预测test集的label。
-
在第二层,我们就直接用这30%数据在第一层预测的结果做为新特征继续训练,然后用test集第一层预测的label做特征,用第二层训练的模型做进一步预测。
其优点在于:
- 1.比stacking简单(因为不用进行k次的交叉验证来获得stacker feature)
- 2.避开了一个信息泄露问题:generlizers和stacker使用了不一样的数据集
缺点在于:
- 1.使用了很少的数据(第二阶段的blender只使用training set10%的量)
- 2.blender可能会过拟合
- 3.stacking使用多次的交叉验证会比较稳健
- 3)分类的Stacking融合(利用mlxtend):
5.4.3 一些其他方法
- 将特征放进模型中预测,并将预测结果变换并作为新的特征加入原有特征中再经过模型预测结果(Stacking变化)(可以反复预测多次将结果加入最后的特征中)
5.5 经验总结
比赛的融合其实涉及多个层面,也是提分和提升模型鲁棒性的一种重要方法:
- 结果层面的融合:这种是最常见的融合方法,其可行的融合方法也有很多,比如根据结果的得分进行加权融合,还可以做Log,exp处理等。在做结果融合的时候,有一个很重要的条件是模型结果的得分要比较近似,然后结果的差异要比较大,这样的结果融合往往有比较好的效果提升。
- 特征层面的融合:这个层面其实感觉不叫融合,准确说可以叫分割,很多时候如果我们用同种模型训练,可以把特征进行切分给不同的模型,然后在后面进行模型或者结果融合有时也能产生比较好的效果。
- 模型层面的融合:模型层面的融合可能就涉及模型的堆叠和设计,比如加Staking层,部分模型的结果作为特征输入等,这些就需要多实验和思考了,基于模型层面的融合最好不同模型类型要有一定的差异,用同种模型不同的参数的收益一般是比较小的。