集成学习常见的两种集成方案为bagging和boosting,其中bagging是一种基于投票的并行方案,boosting是一种基于改变原始数据集分布的迭代串行方案(某些环节也可并行)。bagging的代表算法为随机森林,boosting的代表算法有adaboost、gbdt、xgb等。
AdaBoost算法有AdaBoost.M1和AdaBoost.M2两种算法,AdaBoost.M1是我们通常所说的Discrete AdaBoost,而AdaBoost.M2是M1的泛化形式。adaboost是由Yoav Freund和Robert E. Schapire 首先提出来的一种用于二分类问题的集成方法;紧接着出现的Adaboost.M1将二分类扩展到多分类问题;而AdaBoost.M2不仅可以处理多分类问题,还引入了置信度的概念,进一步扩展了AdaBoost算法;AdaBoostMH算法则是基于AdaBoost.M1算法的一种标签转化方案的多标签算法。关于AdaBoost算法的一个结论是:当弱分类器算法使用简单的分类方法时,boosting的效果明显地统一地比bagging要好.当弱分类器算法使用C4.5时,boosting比bagging较好,但是没有前者明显。后来又有学者提出了解决多标签问题的AdaBoost.MH和AdaBoost.MR算法,其中AdaBoost.MH算法的一种形式又被称为Real Boost算法---弱分类器输出一个可能度,该值的范围是整个R, 和与之相应的权值调整,强分类器生成的AdaBoost算法。事实上:Discrete AdaBoost是指,弱分类器的输出值限定在{-1,+1},每个弱分类器有相应的权值,从而构成一个强分类器。adaboost采用的集成方式是对基分类器的结果进行加权求和,如果结果大于0则样本被分为正类,如果结果小于0则样本被分为负类。adaboost算法要做的就是每次迭代过程中,赋予被错误分类的样本更大的权重。
1). adaboost算法
最终一个样本的预测值为:
从算法步骤中我们可以看出,权重的更新方式为:
2).adaboost.m1算法
adaboost.m1算法和adaboost算法的不同点在于:
a.H(x)的形式发生了变化,没用使用sign()映射转化,但是其本质任然没有发生改变,任然可以看做是对基分类器的分类结果进行头片产生最终结果,而且基分类器的权重本质上也为ln(1-et)/et。
b.两者的本质区别在于第10步,对比我们可以发现为了适应多分类问题,adaboost的权值更新函数做了一定的调整。权值更新方案为:
如果一个样本被上一个分类器错误分类,那么它的权重不变,如果这个样本被上一个分类器正确分类,那么它的权重将乘以et/(1-et),也就是说错误分类的样本权值相对于正确分类的样本权值扩大了(1-et)/et倍(因为如果更改分类错误样本我们不知道其具体偏向哪个类别错误)。
3).adaboost.m2算法
adaboost.M2的思路还是提高难以被正确分类的样本的权重,例如样本可以被分为A,B,C三类,某个样本xi真实类别标签为A,第k轮分类器对xi的分类结果为:
类别 A B C
概率 0.1 0.5 0.6
显然当前基分类器对这个样本的分类不理想,那么adaboost.M2算法会根据步骤8来计算计算当前基分类器的误差,接着步骤10会修改错误类B,C的权重,进而在下一次迭代的步骤6中更新这个样本的权重。