Adaboost(Adaptive Boosting)是集成学习 boosting 家族中的一员。它是以色列计算科学教授 Yoav Freund 和美国计算机科学家 Robert Elias Schapire 于1995年提出的,两人因此在2003年获得了理论计算机领域最负盛名的奖项哥德尔奖(Gödel Prize)。
Adaboost的核心思想
Adaboost的核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器);具体来讲是,训练步骤大致是每个样本都有样本权重且初始权重相等(一般是1/n),迭代训练一轮生成一个弱分类器,下一轮训练的时候,将上一轮分错的样本进行加权,分对的相对降权,让下一轮迭代训练更加的关注分错的样本,以此循环往复,最终将若干个弱分类器进行组合成一个强分类器。
Adaboost的经典算法
Adaboost的最初提出是针对二元分类问题的,这里先介绍原始的针对二元分类的具体算法。
初始化:
- 样本实例的特征数据变量,x1,x2,...,xn;
- 样本实例的类数据变量,y1,y2,...,yn,y∈{-1,1};
- 样本实例的初始化权重(即第一轮迭代的权重),ω1,1,ω2,1,...,ωn,1,每个权重都初始化为1/n;
- 损失函数采用指数函数
- 弱分类器函数是符号函数,h(x)=sign(f(x)),h(x)∈{-1,1};
for t in T(开始进行T轮迭代训练):
- 计算弱分类器的权重αt;
- 将弱分类器加入到集成分类器线性组合函数中;
- 更新样本权重;
以上是经典的Adaboost算法全过程。
Adaboost的改进算法
经典的adaboost算法最初是为了解决二元分类问题而提出的,后来基于其核心思想发展了很多改进算法,针对多分类问题的Adaboost-SAMME、Adaboost-SAMME.R、AdaBoost.M1、AdaBoost.M2、AdaBoost.MH,针对回归问题的AdaBoost.R2,针对排序场景的AdaRank等等;
Adaboost-SAMME 算法
事实上,Adaboost更专业的叫法是Forward Stagewise Additive Modeling using the exponential loss funtion;SAMME是forward Stagewise Additive Modeling using a Multi-class Exponential loss function(使用多类分类指数损失函数的前向逐步叠加模型)的缩写,是为针对解决多分类问题的。
Adaboost-SAMME算法相比于Adaboost经典算法,主要是两点变化:
- 计算基分类器的权重系数时额外加了log(K-1),主要是针对多分类的问题,当k=2时(即二元分类)等同于Adaboost算法;
- 决策函数(也就是最终的强分类器)的形式发生了变化,没有采用Adaboost的符号函数sign(),因为符号函数不适用于多分类,但作用并没有发生实质的变化,仍然可以看成是基分类器对输出结果进行投票;
完整的算法如下:
未完待续
Adaboost-SAMME.R 算法
Adaboost-SAMME.R 区别于 Adaboost-SAMME 的最大变化是通过计算类别的可能性值来递进更新模型。
完整的算法如下:
未完待续
scikit-learn(sklearn)分别实现了 Adaboost-SAMME 和 Adaboost-SAMME.R 算法。
Adaboost.M1 算法
Adaboost.M1 也是将二分类扩展到多分类问题。
未完待续
Adaboost.M2 算法
Adaboost.M2 算法不仅可以处理多分类问题,还引入了置信度的概念。
未完待续