数据挖掘——模型融合
在模型调参结束后,我我们就可以进行模型融合了
这是最后也是一个相当重要的环节,方式大概有有以下几种
模型融合是比赛后期一个重要的环节,大体来说有如下的类型方式。
-
简单加权融合:
- 回归(分类概率):算术平均融合(Arithmetic mean),几何平均融合(Geometric mean);
- 分类:投票(Voting)
- 综合:排序融合(Rank averaging),log融合
-
stacking/blending:
- 构建多层模型,并利用预测结果再拟合预测。
-
boosting/bagging(在xgboost,Adaboost,GBDT中已经用到):
- 多树的提升方法
什么是 stacking
简单来说 stacking 就是当用初始训练数据学习出若干个基学习器后,将这几个学习器的预测结果作为新的训练集,来学习一个新的学习器。
具体可以参看西瓜书。
简单加权平均,结果直接融合
对于分类,同样的可以使用融合方法,比如简单投票。Voting即投票机制,分为软投票和硬投票两种,其原理采用少数服从多数的思想。
- 硬投票:对多个模型直接进行投票,不区分模型结果的相对重要度,最终投票数最多的类为最终被预测的类。
- 软投票:和硬投票原理相同,增加了设置权重的功能,可以为不同模型设置不同权重,进而区别模型不同的重要度。
stacking是一种分层模型集成框架。
以两层为例,第一层由多个基学习器组成,其输入为原始训练集,第二层的模型则是以第一层基学习器的输出作为训练集进行再训练,从而得到完整的stacking模型, stacking两层模型都使用了全部的训练数据。
Blending,其实和Stacking是一种类似的多层模型融合的形式
其主要思路是把原始的训练集先分成两部分,比如70%的数据作为新的训练集,剩下30%的数据作为测试集。
在第一层,我们在这70%的数据上训练多个模型,然后去预测那30%数据的label,同时也预测test集的label。
在第二层,我们就直接用这30%数据在第一层预测的结果做为新特征继续训练,然后用test集第一层预测的label做特征,用第二层训练的模型做进一步预测
分类的Stacking融合(利用mlxtend):