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年提出。它的自...

【scikit-learn】scikit-learn的线性回归模型

内容概要 如何使用pandas读入数据如何使用seaborn进行数据的可视化scikit-learn的线性回归模型和使用方法线性回归模型的评估测度特征选择的方法 作为有监督学习,分类...

【scikit-learn】如何进行模型参数的选择

内容概要 这一节我们介绍以下几个内容: 我们该怎样选择模型用于监督学习任务?我们该如何选择调整得到最好的模型参数?我们该如何对测试数据进行预测估计? 1. 使用整个数据集进行训练和...

python中sklearn实现交叉验证

1、概述在实验数据分析中,有些算法需要用现有的数据构建模型,如卷积神经网络(CNN),这类算法称为监督学习(Supervisied Learning)。构建模型需要的数据称为训练数据。模型构建完后,需...

机器学习算法选择

本文主要回顾下几个常用算法的适应场景和优缺点!对于你的分类问题,你知道应该如何选择哪一个机器学习算法么?当然,如果你真的在乎精度(accuracy),最好的方法就是通过交叉验证(cross-valid...

【scikit-learn】交叉验证及其用于参数选择、模型选择、特征选择的例子

 内容概要¶ 训练集/测试集分割用于模型验证的缺点K折交叉验证是如何克服之前的不足交叉验证如何用于选择调节参数、选择模型、选择特征改善交叉验证 1. 模型验证回顾¶ 进...

机器学习-CrossValidation交叉验证Python实现

版权声明:本文为原创文章,转载请注明来源。1.原理1.1 概念交叉验证(Cross-validation)主要用于模型训练或建模应用中,如分类预测、PCR、PLS回归建模等。在给定的样本空间中,拿出大...

【scikit-learn】评估分类器性能的度量,像混淆矩阵、ROC、AUC等

 内容概要¶ 模型评估的目的及一般评估流程分类准确率的用处及其限制混淆矩阵(confusion matrix)是如何表示一个分类器的性能混淆矩阵中的度量是如何计算的通过改变分类阈值来调整分...

分类之性能评估指标

本文主要介绍几种常用的分类评估指标,同时介绍如何绘制ROC曲线以及AUC值的便捷的计算方法。最后再附上一个绘制ROC曲线和计算AUC的源码实现。Precision和Recall首先我们来看看下面这个混...

【scikit-learn】网格搜索来进行高效的参数调优

 内容概要¶ 如何使用K折交叉验证来搜索最优调节参数如何让搜索参数的流程更加高效如何一次性的搜索多个调节参数在进行真正的预测之前,如何对调节参数进行处理如何削减该过程的计算代价 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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