Adaboost - 新的角度理解权值更新策略

原创 2016年08月28日 21:57:49

本文可移步至个人博客阅读:http://www.csuldw.com/2016/08/28/2016-08-28-adaboost-algorithm-theory/

关于Adaboost,在先前的一篇文章里,也介绍过它的步骤与实现,但理论上的推导未曾涉及。虽然Adaboost算法思想通俗易懂,但权值更新公式的由来,想必并非人人皆知。本文着重于从理论层面进一步阐述Adaboost,最终推导出迭代时的样本权值更新公式。

关于本文使用的数学符号的具体解释,见下表:

变量 符号 描述
训练数据 (X,Y) i个样本为(xi,yi),其中xi=(xi1,xi2,,xid)yi{+1,1}
错误率 e m个弱分类器的错误率为em
分类器的系数 α m个弱分类器的系数为αm
样本权重向量 D 迭代值第m次时的第i个样本的权值为Dm,i,初始阶段,所有样本的权重值均为1N
归一化因子 Z 迭代值第m次的的归一化因子为Zm
组合分类器 f(x) 迭代值第m次的组合分类器为fm(x)
最终分类器 G(X) 最终分类器为G(X)=sign(fM(x))

下面来看看Adaboost的算法思想与其权值的推导。

算法思想

关于Adaboost,它是boosting算法,从bias-variance(偏差-方差)的角度来看,boosting算法主要关注的是降低偏差。仔细想想便可理解,因为boosting算法每个分类器都是弱分类器,而弱分类器的特性就是high-bias & low variance(高偏差-低方差),其与生俱来的优点就是泛化性能好。因此,将多个算法组合起来之后,可以达到降偏差的效果,进而得到一个偏差小、方差小的泛化能力好的模型。另外,Adaboost的损失函数是指数损失L(y,f(x))=eyf(x)。为了掌握Adaboost的整个流程,我将其思想通过下图简单的进行了一番总结(由于此图是我使用LaTex编辑的,所以如有表达不妥的地方,还请读者指出):

图一 Adaboost 算法

Adaboost算法可以归纳至三步,如下:

  • 第一步:初始化每个样本的权重值为1N
  • 第二步:迭代M次,每次都根据错误率em不断修改训练数据的权值分布(此处需要确保弱学习器的错误率e小于0.5),样本权值更新规则为增加分类错误样本的权重,减少分类正确样本的权重;
  • 第三步:根据每个弱学习器的系数αm,将M个弱学习器组合到一起,共同决定最终的学习结果,即G(X)=Mm=1αmGm(x).

对于上面给出的算法,可能会存在一些疑问,诸如:

  1. 弱学习器的错误率e为何要小于0.5?
  2. 弱学习器的系数α这个等式如何得到的?
  3. 归一化因子Zm又有何寓意?

对于第一点,应该比较容易理解,因为如果弱学习器的效果都没有随机猜测好,那么学习得到的模型毫无疑问肯定是无用的。事实上,在上面三个问题中,最让人不解的应该是这个α的取值。为什么它会是这种形式呢?下面我们一起来推导一下。

权值推导

从图一我们可以看到,迭代至第m次时,分类器的系数计算公式为:

αm=12ln(1emem)(1)

然而,为何会是它呢?其推导方式有两种,第一种是最小化训练误差界进行推导;第二种是最小化损失函数进行推导。两者在本质上是一样的,都是为了求最小化某个式子时的α值。在下面的篇章中,只涉及第一种。也就是为了确定α的表达式,根据训练误差界来逐步推导。

训练误差界

从图一可知,最终得到的函数表达式是G(x),然而,当G(xi)yi时,yifM(xi)<0,从而得到eyifM(xi)1,进而可以得到:

1Ni=1NI(G(xi)yi)1NieyifM(xi)(2)

从图一中还可以看到,更新训练样本的权值分布公式如下:

Dm+1,i=Dm,iZmexp{αmyiGm(xi)}(3)

现在,对权值更新公式(3)变形,得到下列式子:

ZmDm+1,i=Dm,iexp{αmyiGm(xi)}(4)

对于上面这个式子,非常重要,是下面这个推导的核心。对于公式(2)不等于的右式,我们可以做如下推导:

1NieyifM(xi)=1Niexp(m=1MαmyiGm(xi))=D1,i=1NiD1,im=1Mexp(αmyiGm(xi))=(4)iZ1D2,im=2Mexp(αmyiGm(xi))=(4)Z1iZ2D3,im=3Mexp(αmyiGm(xi))=(4)Z1Z2iZ3D4,im=4Mexp(αmyiGm(xi))=m=1MZm

因此可以得出,Adaboost的误差界为

1Ni=1NI(G(xi)yi)1NieyifM(xi)=m=1MZm(5)

从公式(6)可以看出,在每一轮生成弱分类器Gm(x)时,应使归一化因子Zm尽可能的小,而最小化时的α就是我们要求的α, 即求优化表达式minαm Zm(αm)

系数α

将问题转化为求最小值,这就比较简单了,只需要对Zmαm的导数,然后令导数为零,求出此时的αm就好了。OK,下面给出计算过程如下:

Zm=i=1NDm,iexp{αyiGm(xi)}=Gm(xi)=yiDm,ieαm+Gm(xi)yiDm,ieαm=(1em)eαm+emeαm(6)

Zmαm=(1em)eαm+emeαm(7)

然后令导数式(7)等于0,简单的进行化简即可求得(1)式。

说明:对于(6)式的变形,从第一步变换为第二步时,应用的规则是,当样本被正确分类,yiGm(xi)=1;当样本被错误分类,yiGm(xi)=1。而从第二步到第三步,则可以理解为正确分类的样本所占比例为1em,错误分类的样本占比em

样本权值

通过上面的推导,得到α之后,根据(1)式,又可以化简得到正确分类时的eαm 和错误分类时的eαm ,公式如下:

eαm=e12ln(1emem)=em1em(8)

eαm=e12ln(1emem)=1emem(9)

而对于归一化因子Zm,又可以通过α推导其与错误率e的关系,推导过程如下:

Zm=i=1NDm,iexp{αyiGm(xi)}=Gm(xi)=yiDm,ieαm+Gm(xi)yiDm,ieαm=(1em)eαm+emeαm=(8)(9)(1em)em1em+em1emem=2em(1em)(10)

因此,根据(???)式的推导结果,可以进一步得到,当样本被正确分类时,yiGm(xi)=1,权值公式可更新为:

exp{αmyiGm(xi)}Zm=eαmZm=(9)(10)em1em12em(1em)=12(1em)(11)

当样本被错误分类时,yiGm(xi)=1,权值公式可更新为:

exp{αmyiGm(xi)}Zm=eαmZm=(9)(10)1emem12em(1em)=12em(12)

公式(11)与公式(12)就是最终的权值更新系数,只需将其带入到公式(3)即可求得新的样本权值。

Summary

本文主要侧重于权值的推导,而编写这篇博文的目的主要是为了弥补先前学习过程中的疏忽与不足,进而达到学习的目的。关于文章的实现,可去博主的github下载源码csuldw-Adaboost (各位同学,记得给个star噢^_^),另外,也可参考先前的博文Machine Learning algorithm - Adaboost。关于机器学习的其它文章,本博客将会持续更新。

References

  • Y Freund,R Schapire, A decision-theoretic generalization of on-line learning algorithms and an application to boosting, Journal of Popular Culture, 1997
  • 统计学习方法》 by 李航
  • Wikipedia-Adaboost
  • 《机器学习 Machine Learning》 by 周志华
版权声明:本文为博主原创文章,转载请注明来源。

adaboost原理(包含权重详细解释)

1.1 Adaboost是什么 AdaBoost,是英文"Adaptive Boosting"(自适应增强)的缩写,由Yoav Freund和Robert Schapire在1995年提出。它的自...

Adaboost算法介绍

boosting方法有许多不同的变形。其中最流行的一种就是AdaBoost方法,这个名称是“adaptive boostint”的缩写。这个方法允许设计者不断地加入新的“弱分类器”,直到达到某个预定的...

机器学习-AdaBoost算法

提升方法AdaBoost算法 一、提示方法的基本思路 提示方法基于这样一种思想:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好。对于分类问题而言...

提升方法AdaBoost算法学习笔记

提升方法AdaBoost算法学习笔记 For xgboost:为了好好学习xgboost,由于算法基础比较薄弱,曲线救国,从提升方法、提升树、GBDT一步步看起。手头有李航老师的《统计学习方法》以及周...

Numpy基础:数组、矢量计算以及ufunc通用函数使用

Numpy array 创建、索引切片、通用函数

Python学习-格式化数据并排序

目的:将几个记录时间时刻的数据格式化统一,然后进行排序。1.前提有四个文件,文件的格式都不一样,都表示时间 james.txt'2-34', '3:21', '2.34', '2.45', '3.0...

Android 源码系列之<八>从源码的角度深入理解缓存策略之LruCache

在Android开发中缓存技术应用的十分广泛,我们最长见的是对图片进行缓存毕竟图片很耗内存的,目前比较著名的图片加载库比如Android-Universal-Image-Loader等都使用了缓存技术...

深度学习笔记9:权值更新的实现

权值更新 在前面的反向传播中我们计算出每一层的权值W和偏置b的偏导数之后,最后一步就是对权值和偏置进行更新了。 在之前的BP算法的介绍中我们给出了如下公式: 其中的α为学习速率,一般学习率并不是...

Caffe中权值是怎么更新的

网址:http://blog.csdn.net/mounty_fsc/article/details/51588773 (Caffe,LeNet)权值更新(七) 在Solver::Apply...
  • junmuzi
  • junmuzi
  • 2016年08月16日 17:21
  • 1707
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Adaboost - 新的角度理解权值更新策略
举报原因:
原因补充:

(最多只允许输入30个字)