在机器学习中,已经有了许许多多的模型,比如SVM,逻辑回归等等,这些算法有各自的优缺点,并且每种算法也可以产生非常多的不同的模型。如果把这些算法都结合起来,取其所长,或者说把一些比较弱的分类器结合起来形成一个强分类器(boosting),可以得到更优的模型。把一堆算法融合起来这个方法叫blending;根据融合方式不同,如果是线性融合则称为linear blending, 如果在一堆算法的输出结果上再做一个其他的算法融合,这叫做stacking。这种思想启发了现有的很多boosting算法,比如把一堆简单的弱分类器融合就变成了adaboost; 把一堆决策树进行融合就形成了random forest。本文主要写ensemble learning的思想。
基本的模型融合方法
假设现在已经训练得到了一堆diverse的分类器g1,g2,g3…gt, 我们想要把这t个模型融合得到G(x),如何融合呢?可以想象一下这t个g是t个人给出的不同意见,现在要根据这t个意见得到一个最终的决策,那么可以有下面几种办法。
- 选取validation效果最好的一个模型作为G
从类似于从t个人中找出能力最强的一个人,听从他的意见。这是一种比较方便的做法,但缺点是如果t个模型都很弱,那么找出来的最好的模型肯定也是非常弱的。
G(x)=gt(x),t=argminEval(gt(x)) - 取这t个模型的平均
采用民主投票的方式,每人投一票,每票的权重一样。 (uniform blending)
G(x)=sign(1N