本文可移步至个人博客阅读:http://www.csuldw.com/2016/08/28/2016-08-28-adaboost-algorithm-theory/
关于Adaboost,在先前的一篇文章里,也介绍过它的步骤与实现,但理论上的推导未曾涉及。虽然Adaboost算法思想通俗易懂,但权值更新公式的由来,想必并非人人皆知。本文着重于从理论层面进一步阐述Adaboost,最终推导出迭代时的样本权值更新公式。
关于本文使用的数学符号的具体解释,见下表:
变量 | 符号 | 描述 |
---|---|---|
训练数据 | (X,Y) | 第 i 个样本为
|
错误率 | e | 第
|
分类器的系数 | α | 第 m 个弱分类器的系数为
|
样本权重向量 | D | 迭代值第
|
归一化因子 | Z | 迭代值第
|
组合分类器 | f(x) | 迭代值第 m 次的组合分类器为
|
最终分类器 | G(X) | 最终分类器为 G(X)=sign(fM(x)) |
下面来看看Adaboost的算法思想与其权值的推导。
算法思想
关于Adaboost,它是boosting算法,从bias-variance(偏差-方差)的角度来看,boosting算法主要关注的是降低偏差。仔细想想便可理解,因为boosting算法每个分类器都是弱分类器,而弱分类器的特性就是high-bias & low variance(高偏差-低方差),其与生俱来的优点就是泛化性能好。因此,将多个算法组合起来之后,可以达到降偏差的效果,进而得到一个偏差小、方差小的泛化能力好的模型。另外,Adaboost的损失函数是指数损失 L(y,f(x))=e−yf(x) 。为了掌握Adaboost的整个流程,我将其思想通过下图简单的进行了一番总结(由于此图是我使用LaTex编辑的,所以如有表达不妥的地方,还请读者指出):
Adaboost算法可以归纳至三步,如下:
- 第一步:初始化每个样本的权重值为 1N ;
- 第二步:迭代 M 次,每次都根据错误率
em 不断修改训练数据的权值分布(此处需要确保弱学习器的错误率 e 小于0.5 ),样本权值更新规则为增加分类错误样本的权重,减少分类正确样本的权重; - 第三步:根据每个弱学习器的系数 αm ,将 M 个弱学习器组合到一起,共同决定最终的学习结果,即
G(X)=∑Mm=1αmGm(x) .
对于上面给出的算法,可能会存在一些疑问,诸如:
- 弱学习器的错误率 e 为何要小于
0.5 ? - 弱学习器的系数 α 这个等式如何得到的?
- 归一化因子 Zm 又有何寓意?
对于第一点,应该比较容易理解,因为如果弱学习器的效果都没有随机猜测好,那么学习得到的模型毫无疑问肯定是无用的。事实上,在上面三个问题中,最让人不解的应该是这个 α 的取值。为什么它会是这种形式呢?下面我们一起来推导一下。
权值推导
从图一我们可以看到,迭代至第 m 次时,分类器的系数计算公式为:
然而,为何会是它呢?其推导方式有两种,第一种是最小化训练误差界进行推导;第二种是最小化损失函数进行推导。两者在本质上是一样的,都是为了求最小化某个式子时的 α 值。在下面的篇章中,只涉及第一种。也就是为了确定 α 的表达式,根据训练误差界来逐步推导。
训练误差界
从图一可知,最终得到的函数表达式是 G(x) ,然而,当 G(xi)≠yi 时, yifM(xi)<0 ,从而得到 e−yifM(xi)≥1 ,进而可以得到: