adaboost 的思想很简单,算法流程也很简单,但它背后有完整的理论支撑,也有很多扩展。
权重更新
在算法描述中,权重如是更新
其中 wm,i 是m轮样本i的权重,αm是错误率,Øm是第m个基学习器的输出,Zm是归一化因子
当预测值与真实值相同时,yØ=1,-αyØ<0,exp(-αyØ)<1,权重降低;
当预测值与真实值不同时,yØ=-1,-αyØ>0,exp(-αyØ)>1,权重增加;
而且变化幅度由α确定;
这样可以说得通,但是这个式子是怎么来的呢?
原理推导
第一个式子表示权重的连乘,每个乘子是第t轮的权重,前T个乘子就是 DT,用DT乘以最后一项就是最开始的式子。
f(x)是组合分类器的输出,yi是个常数,所以上式如是变形。
这里要注意,h(x)是基分类器的输出,其值域为{-1,1},而f(x)是组合分类器的输出,其值域不是{-1,1}
错误上界
Abdboost 一个很重要的特性就是拥有错误上界,而且随着迭代的增加,上界逐渐降低。
首先
这里的 H(x) 是 adaboost 最后的输出,f(x)为组合分类器的输出,H(x)=sign(f(x)),很容易推出 yf(x)≤0
[H(x)≠y] 表示当 [ ] 内成立时,值为1,否则为0,显然
m为样本个数
显然不等号左边就是错误率
由【权重更新】的公式可得
D是归一化的,ΣD和为1
错误上界就是 ∏Z
感性理解:Z是权重 x 损失,基分类器越好,Z越小,基分类器越多,ΠZ越小
损失函数
错误率存在上界ΠZ,其实就是损失函数
指数损失函数
实际上Adaboost的损失函数为指数损失函数
指数损失函数有个特性:分错时,损失很大,分对时,损失很小,指数级增加,这使得减小损失的重点放在分错的样本上。
这就是 Adaboost 的思想。
到这你可能认为这个指数损失来的蹊跷,明明是ΠZ啊,确实如此,Adaboost作者的说法是,指数损失函数并不是算法设计的初衷,但是它更好的解释了算法,并提供了扩展空间。
为什么是加性模型
最终的损失函数为 ΠZ
这个损失函数是连乘,且乘子之间存在串行关系,这很难通过梯度下降等方法获取最优解。
采用贪心策略,保证每个Z最小,那就认为 ΠZ 最小。
这就是 Adaboost 为什么是加性模型。
梯度下降
每一步最小化损失 Z
先对 exp(-αyh(x)) 实施一个很常用的变形
当 y=h(x) 时,exp(-αyh(x))=exp(-α)
当 y≠h(x) 时,exp(-αyh(x))=exp(α)
只能取两个值
那么 exp(-αyh(x)) 到底等于 exp(-α) 还是 exp(α),或者说以一定概率等于 exp(-α) 和 exp(α)
二分类,两个概率和为1
对Z进行梯度下降
Z对应了一个固定的分类器,预使Z最小,能改变的只有α,于是对α求导,令导数等于0
P(y≠h(x)) 即错误的概率,也就是错误率,用ε表示
α 就是加性模型的系数
也就是算法流程中基分类器的系数。
为什么错误率要小于0.5
有人说错误率大于0.5,还不如瞎猜,基分类器太渣,有一定道理
但从数学角度来考虑,当ε<0.5时,α<0,也就是说这个分类器只起到了反作用,请问你是来捣乱的吗?轰出去
处理方式有两种,一是直接结束迭代,二是放弃这个基分类器,重新训练一个,这种适合带随机的Adaboost。
此时再来看Adaboost的算法流程
每一步是不是很清楚。
多分类
原始的 Adaboost 是二分类模型,是因为最后的 sign 只能映射到2个类。
那能否实现多分类呢?当然可以,并且有多种方法
Adaboost.M1
纵观上面的原理推导,只有在对Z求导时,用到了二分类,即两个概率和为1,
但是对一个样本而言,它的预测值只有等和不等真实值两种情况,所以不管是多分类还是二分类,求导方法相同。
再来看看求导过程
确实如上所说。
M1的思路和Adaboost完全相同,只是把基分类器由二分类器改成了多分类器,最后的sign函数肯定要换掉
其实就是统计哪个类被分的最多,只是计数时要乘以权重。
缺点:Adaboost 要求基分类器错误率小于0.5,这对二分类器来说很正常,但是对于多分类器过于严格。
Adaboost.SAMME
M1的改进版
与Adaboost算法流程相同,只是改变了分类器权重的计算
其他基本同M1,算法大致如下
要使 α>0
此时 错误率 不是小于0.5,而是1-1/k,如0.8,0.9等,更为宽松,解决了M1的问题。
Adaboost.SAMME.R
该算法类似 Adaboost.SAMME,只是它使用的基分类器输出为概率。
具体请百度
Adaboost.MH
采用一对多的思想,见我的博客 二分类实现多分类
还有其他实现多分类的方法,不再赘述。
VS 随机森林
随机森林,每棵树是个强分类器,甚至过拟合,偏差很小,方差很大,模型目标主要是降低方差;
Adaboost,每棵树是个弱分类器,偏差很大,方差很小,模型目标主要是降低偏差。 【偏差降低后,模型目的达到,就成了强分类器】
参考资料:
https://zhuanlan.zhihu.com/p/34842057
https://zhuanlan.zhihu.com/p/25096501
https://www.zhihu.com/search?type=content&q=adaboost%20%20mh