• adaboost概念(Adaptive Boosting)
  • adaboost算法分析与推导
  • 前向分步算法与adaboost
  • adaboost算法总结
  • 参考与推荐

adaboost概念(Adaptive Boosting)

AdaBoost的中文叫做自适应增强,由Yoav Freund和Robert Schapire在1995年提出。它的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。adaboost算法是模型为加法模型、损失函数为指数函数、学习算法为前向分布算法时的二类分类学习方法。具体算法如下(摘自统计学习方法):

  1. 初始化训练数据的权值分布
    D1=(w11,...,w1i,...,w1N),w1i=1N,i=1,2,...,ND_1 = (w_{11},...,w_{1i},...,w_{1N}),\quad w_{1i}=\frac{1}{N}, \quad i=1,2,...,ND1​=(w11​,...,w1i​,...,w1N​),w1i​=N1​,i=1,2,...,N

  2. 对m=1,2,…,M
    (a):使用具有权值分布DMD_{M}DM​的数据集进行学习,得到基本分类器Gm(x):X→{−1,+1}G_m(x):\mathcal{X} \to \{-1,+1\}Gm​(x):X→{−1,+1}
    (b):计算Gm(x)G_m(x)Gm​(x)在训练数据集上的分类误差率:
    em=P(Gm(xi)≠yi)=∑i=1NwmiI(Gm(xi)≠yi)=∑Gm(xi)≠yiwwie_m = P(G_m(x_i)\ne y_i)=\sum_{i=1}^Nw_{mi}I(G_m(x_i)\ne y_i) = \sum_{G_m(x_i)\ne y_i}w_{wi}em​=P(Gm​(xi​)̸​=yi​)=i=1∑N​wmi​I(Gm​(xi​)̸​=yi​)=Gm​(xi​)̸​=yi​∑​wwi​

    (c ):计算Gm(x)G_m(x)Gm​(x)的系数
    αm=12ln1−emem\alpha_m = \frac{1}{2}ln\frac{1-e_m}{e_m}αm​=21​lnem​1−em​​

    (d):更新数据集的权值分布
    Dm+1=(wm+1,1,...,wm+1,i,...,wm+1,N)D_{m+1}=(w_{m+1,1},...,w_{m+1,i},...,w_{m+1,N})Dm+1​=(wm+1,1​,...,wm+1,i​,...,wm+1,N​)

wm+1,i=wmiZmexp(−αmyiGm(xi)),i=1,2,...,Nw_{m+1,i} = \frac{w_{mi}}{Z_m}exp(-\alpha_my_iG_m(x_i)),\quad i=1,2,...,Nwm+1,i​=Zm​wmi​​exp(−αm​yi​Gm​(xi​)),i=1,2,...,N

  其中ZMZ_{M}ZM​是规范化因子,它使Dm+1D_{m+1}Dm+1​成为一个概率分布。
Zm=∑i=1Nwmiexp(−αmyiGm(xi))Z_m = \sum_{i=1}^Nw_{mi}exp(-\alpha_my_iG_m(x_i))Zm​=i=1∑N​wmi​exp(−αm​yi​Gm​(xi​))

  1. 构建基本分类器的线性组合
    f(x)=∑m=1MαmGm(x)f(x) = \sum_{m=1}^M\alpha_mG_m(x)f(x)=m=1∑M​αm​Gm​(x)

  得到最终分类器为:
G(x)=sign(f(x))=sign(∑m=1MαmGm(x))G(x) = sign(f(x))=sign(\sum_{m=1}^M\alpha_mG_m(x))G(x)=sign(f(x))=sign(m=1∑M​αm​Gm​(x))

另外AdaBoost算法最终分类器的训练误差界为:
1N∑i=1NI(G(xi)≠yi)⩽1N∑iexp(−yif(xi))=∏mZm\frac{1}{N}\sum_{i=1}^N I(G(x_i)\ne y_i) \leqslant \frac{1}{N}\sum_{i} exp(-y_if(x_i)) = \prod_{m}Z_mN1​i=1∑N​I(G(xi​)̸​=yi​)⩽N1​i∑​exp(−yi​f(xi​))=m∏​Zm​

而二类分类问题adaboost的训练误差界为:
∏m=1MZm=∏m=1M[2em(1−em)]=∏m=1M(1−4γm2)⩽exp(−2∑m=1Mγm2),rm=12−em\prod_{m=1}^MZ_m = \prod_{m=1}^M [2\sqrt{e_m(1-e_m)}] = \prod_{m=1}^M\sqrt{(1-4\gamma_m^2)}\leqslant exp(-2\sum_{m=1}^M\gamma_m^2),r_{m}=\frac{1}{2}-e_{m}m=1∏M​Zm​=m=1∏M​[2em​(1−em​)​]=m=1∏M​(1−4γm2​)​⩽exp(−2m=1∑M​γm2​),rm​=21​−em​

adaboost算法分析与推导

针对第一步,首先初始化训练样本的权值,总共有n个样本,那么就可以得到n个权值,记做wnw_{n}wn​,因为是第一次,所以加上标记1,为w1nw_{1n}w1n​,另外我们并不知道权值分布情况,可以认为每个权值都是相同的,即权值w1n=1Nw_{1n}=\frac{1}{N}w1n​=N1​

针对第二步,进行M轮学习,得到基本分类器Gm(x)G_m(x)Gm​(x)以及分类器预测错误的时候此时分类误差的概率eme_mem​ ,而后面的那个符号“I”,我们可以认为是python里的boolean值的标记,相等为True,记做1;不相等为False,记做0,那么这里就表示为分类错误的情况下的权值之和。
然后计算出αm\alpha_mαm​,它表示表示 Gm(x)G_{m}(x)Gm​(x)在最终分类器中的重要性,并且作为一个二分类算法,分类正确的概率永远比错误要高,否则就没有算下去的必要了。所以em≤12e_{m}\leq\frac{1}{2}em​≤21​,1−emem>1\frac{1-e_m}{e_m}>1em​1−em​​>1,则αm≥0\alpha_{m}\geq0αm​≥0,αm\alpha_{m}αm​随着em{e_m}em​的减小而增大,即误差率越小的基本分类器在最终分类器中的作用越大。
那么有了系数,我们便可以对数据集进行规范化或者说归一化,而这里的权值分布公式我们可以调整为:
wm+1,i={wmiZme−αm,Gm(xi)=yiwmiZmeαm,Gm(xi)≠yiw_{m+1,i}=\left\{ \begin{array}{c}\frac{w_{mi}}{Z_{m}}e^{-\alpha_{m}},G_{m}(x_{i})=y_{i}\\\frac{w_{mi}}{Z_{m}}e^{\alpha_{m}},G_{m}(x_{i})\neq y_{i}\end{array}\right.wm+1,i​={Zm​wmi​​e−αm​,Gm​(xi​)=yi​Zm​wmi​​eαm​,Gm​(xi​)̸​=yi​​

其中ZmZ_{m}Zm​就是我们的归一化因子,那么由此可知,当出现分类错误的时候,结果是大于1的,而被正确分类样本的权值却得以缩小,因此误分类样本在下一轮学习中起更大作用,这个在下面我们会给出证明。

首先我们证明关于ZmZ_{m}Zm​,它的计算是通过错误样本数和正确样本数的加权和,推导过程如下(由于csdn好像不支持连等符号,所以只能通过latex或者axmath先运行出公式截图进来):

推出了ZmZ_{m}Zm​,下一步就是系数ama_{m}am​,这里有一种简单的做法通过调整过后的权值公式,将分类错误的条件看成eme_{m}em​,分类正确看成1−em1-e_{m}1−em​,直接两者做除,即可得到:
e2a=12em1−em⇒am=12ln1−ememe^{2a}=\frac{1}{2}\frac{e_{m}}{1-e_{m}}\Rightarrow a_{m}=\frac{1}{2}ln\frac{1-e_{m}}{e_{m}}e2a=21​1−em​em​​⇒am​=21​lnem​1−em​​

做出的图,横轴为分类器错误率,纵轴为分类器系数;

虽然上面的做法求是求出来了,但忽略了很多细节,这里我推荐一篇博文的做法,链接在后面,它相当于将已知条件全部带入然后展开了,如下:

针对第三步,我们通过线性组合得到了它的最终分类器,加上sign表示有正例与负例。

另外还有adaboost的误差上界,这个东西我没有去推导的,它最终得到的结果也是证明了adaboost存在边界,我们可以在每一轮选取适当的GmG_{m}Gm​使得ZmZ_{m}Zm​最小,从而使得训练误差下降最快,迭代次数最少。而下界不需要考虑,正如算法的名字,叫Adaptive Boosting,表示它可以适应弱分类器各自的训练误差率。

还有关于习题,这里我推荐上面那张图的作者的博客,习题描述得很好,大道至简,如果李航140-142面的题目没有看懂,可以看下面这篇:

Adaboost算法原理分析和实例+代码(简明易懂)

前向分步算法与adaboost

在概念中提到了一句话,也是李航书中的一句话:即可以认为adaboost算法是模型为加法模型,损失函数为指数函数,学习算法为前向分步算法时的二类分类学习方法。

加法模型我们知道是什么了,可以看我上一节对于提升算法的推导,有些地方殊途同归,而对于前向分步算法我们这里直接给出重要的两步:

  1. 极小化损失函数
    (βm,γm)=arg⁡min⁡β,γ∑i=1NL(yi,fm−1(xi)+βb(xi;γ))(\beta_m,\gamma_m) = \arg\min_{\beta,\gamma} \sum_{i=1}^N L(y_i,f_{m-1}(x_i)+\beta b(x_i;\gamma))(βm​,γm​)=argβ,γmin​i=1∑N​L(yi​,fm−1​(xi​)+βb(xi​;γ))
  2. 更新
    fm(x)=fm−1(x)+βm⎵系数⋅b(x;γm)⎵基函数和参数f_m(x) = f_{m-1}(x) +\underbrace{\beta_m}_{\text{系数}}\cdot\underbrace{{b(x;\gamma_m)}}_{\text{基函数和参数}}fm​(x)=fm−1​(x)+系数βm​​​⋅基函数和参数b(x;γm​)​​

adaboost推导:
AdaBoost算法是前向分步加法算法的特例,模型是由基本分类器组成的加法模型,这里我们将βb(xi;γ)\beta b(x_i;\gamma)βb(xi​;γ) = Gm(x)G_{m}(x)Gm​(x),
f(x)=∑m=1MαmGm(x)f(x) = \sum_{m=1}^M\alpha_mG_m(x)f(x)=m=1∑M​αm​Gm​(x)

损失函数是指数函数:
L(y,f(x))=exp(−yf(x))L(y,f(x)) = exp(-y f(x))L(y,f(x))=exp(−yf(x))

因此,根据前向分步算法的步骤,我们需要求解的极小化损失函数变为了:
(αm,Gm)=arg⁡min⁡α,G∑i=1Nexp[−yi(fm−1(xi)+αG(xi))](\alpha_m,G_m) = \arg\min_{\alpha,G} \sum_{i=1}^N exp[-y_i(f_{m-1}(x_i)+\alpha G_(x_i))](αm​,Gm​)=argα,Gmin​i=1∑N​exp[−yi​(fm−1​(xi​)+αG(​xi​))]

令wi(m)=exp(−yifm−1(xi))w_i^{(m)} = exp(-y_i f_{m-1}(x_i))wi(m)​=exp(−yi​fm−1​(xi​)),因为它没有依赖关系,可以将其提出,进行第一步化简,得:
(αm,Gm)=arg⁡min⁡α,G∑i=1Nwi(m)exp(−βyiG(xi))(\alpha_m,G_m) = \arg\min_{\alpha,G} \sum_{i=1}^N w_i^{(m)} exp(-\beta y_i G(x_i))(αm​,Gm​)=argα,Gmin​i=1∑N​wi(m)​exp(−βyi​G(xi​))

然后我们发现yi∈{−1,1}y_i \in \lbrace-1,1\rbraceyi​∈{−1,1},那么就和上面推导ZmZ_{m}Zm​一样,将其拆成两个权值相加,就是最后一步没有那么快得出来:

而很显然,如果要使上式的最后一个式子最小,e−αe^{-\alpha }e−α都是常数,那么可以得到:
Gm=arg⁡min⁡G∑i=1NwmiI(yi≠G(xi))G_m = \arg\min_G \sum_{i=1}^N w_{mi} I(y_i \ne G(x_i))Gm​=argGmin​i=1∑N​wmi​I(yi​̸​=G(xi​))

那么最终我们需要求得它最小。所以对GmG_{m}Gm​求导:
∂L∂α=eα∑i=1NwmiI(yi≠G(xi))+e−α∑i=1NwmiI(yi≠G(xi))−e−α∑i=1Nwmi\frac {\partial_L} {\partial{\alpha}} = e^{\alpha} \sum_{i=1}^N w_{mi} I(y_i \ne G(x_i)) + e^{-\alpha} \sum_{i=1}^N w_{mi} I(y_i \ne G(x_i)) - e^{-\alpha} \sum_{i=1}^N w_{mi}∂α∂L​​=eαi=1∑N​wmi​I(yi​̸​=G(xi​))+e−αi=1∑N​wmi​I(yi​̸​=G(xi​))−e−αi=1∑N​wmi​

然后另其为0,得到:
eα∑i=1NwmiI(yi≠G(xi))=[∑i=1Nwmi−∑i=1NwmiI(yi≠G(xi))]e−αe^{\alpha} \sum_{i=1}^N w_{mi} I(y_i \ne G(x_i)) = [\sum_{i=1}^N w_{mi} - \sum_{i=1}^N w_{mi} I(y_i \ne G(x_i))] e^{-\alpha}eαi=1∑N​wmi​I(yi​̸​=G(xi​))=[i=1∑N​wmi​−i=1∑N​wmi​I(yi​̸​=G(xi​))]e−α

然后两边取对数ln,得到:
lneα=12ln∑i=1Nwmi−∑i=1NwmiI(yi≠G(xi))∑i=1NwmiI(yi≠G(xi))ln e^{\alpha} = \frac {1} {2} ln\frac {\sum_{i=1}^N w_{mi} - \sum_{i=1}^N w_{mi} I(y_i \ne G(x_i))} {\sum_{i=1}^N w_{mi} I(y_i \ne G(x_i))}lneα=21​ln∑i=1N​wmi​I(yi​̸​=G(xi​))∑i=1N​wmi​−∑i=1N​wmi​I(yi​̸​=G(xi​))​

令em=∑i=1NwmiI(Gm(xi)≠yi)e_m =\sum_{i=1}^Nw_{mi}I(G_m(x_i)\ne y_i)em​=∑i=1N​wmi​I(Gm​(xi​)̸​=yi​),则上式可以写为:
am=12ln1−emema_{m}=\frac{1}{2}ln\frac{1-e_{m}}{e_{m}}am​=21​lnem​1−em​​

与前面的推导完全一致。

adaboost算法总结

关于adaboost,其实总结也很简单,根据我上面写的概念只有三步,所以搞懂一些推导过程还是有必要的。写这篇博文的中途,就在昨天,我去看了一下周志华老师的boost 25年,很多东西深受启发,关于adaboost的过拟合问题,我没想过这其中竟然有如此多有趣的事情,当然也是周的语言风趣幽默以及他对adaboost的贡献才更加让人对于adaboost思想的升华,这里强烈推荐观看。

另外插一些题外话,本来还想再通过程序以及相应的参数说明算法,但后来想想还是算了,编程技术不到家,后期也准备学习《机器学习实战》,然后再开一个系列回来温习推导。下面的参考与推荐里面也有我找到的一个很好的代码练习博文。

参考与推荐

[1]. 《统计学习方法 李航著》第8章;
[2]. wiki. https://en.wikipedia.org/wiki/AdaBoost
[3]. 周志华的boosting 25年视频:Boost 25年
[4]. Adaboost 算法的原理与推导
[5]. Adaboost算法原理分析和实例+代码(简明易懂)
[6]. 邹博的ppt,暂时没地址
[7]. 李航《统计学习方法》第八章——用Python+Cpp实现AdaBoost算法(MNIST数据集)
[8] 从前向分步算法推导出AdaBoost

集成学习(三):adaboost算法推导相关推荐

  1. 04 集成学习 - Boosting - AdaBoost算法构建

    03 集成学习 - Boosting - AdaBoost算法原理 十.AdaBoost算法构建 上一章最后说明了每个基模型的权值α是如何求得的,于是我就可以对模型进行更新操作了. 构建过程一 1.假 ...

  2. EL之AdaBoost:集成学习之AdaBoost算法的简介、应用、经典案例之详细攻略

    EL之AdaBoost:集成学习之AdaBoost算法的简介.应用.经典案例之详细攻略 目录 AdaBoost算法的简介 1.理解AdaBoost算法 1.1.从前向逐步递增角度来看理解AdaBoos ...

  3. 集成学习之Adaboost

    集成学习之Adaboost 时间:2022/6/13 文章目录 集成学习之Adaboost 1.集成学习 1.1学习器 1.2集成学习算法 1.3学习器的选择 2.AdaBoost 2.1Boosti ...

  4. 集成学习、Bagging算法、Bagging+Pasting、随机森林、极端随机树集成(Extra-trees)、特征重要度、包外评估

    集成学习.Bagging算法.Bagging+Pasting.随机森林.极端随机树集成(Extra-trees).特征重要度.包外评估 目录

  5. 监督学习 | 集成学习 之AdaBoost、梯度提升及Slearn实现

    文章目录 Boosting 1. AdaBoost 1.1 AdaBoost 原理 1.2 Python 实现 1.3 Sklearn 实现 2. 梯度提升 2.1 梯度提升回归树(GBRT) 2.1 ...

  6. 机器学习的几种方法(knn,逻辑回归,SVM,决策树,随机森林,极限随机树,集成学习,Adaboost,GBDT)

     一.判别模式与生成模型基础知识 举例:要确定一个瓜是好瓜还是坏瓜,用判别模型的方法是从历史数据中学习到模型,然后通过提取这个瓜的特征来预测出这只瓜是好瓜的概率,是坏瓜的概率. 举例:利用生成模型是根 ...

  7. 机器学习集成学习进阶LightGBM算法和案例

    目录 1 lightGBM 1.1 lightGBM演进过程 1.2 AdaBoost算法 1.3 GBDT算法以及优缺点 1.4 启发 2 什么是lightGBM 3 lightGBM原理 3.1 ...

  8. 基于 Java 机器学习自学笔记 (第63-65天:集成学习之AdaBoost)

    注意:本篇为50天后的Java自学笔记扩充,内容不再是基础数据结构内容而是机器学习中的各种经典算法.这部分博客更侧重于笔记以方便自己的理解,自我知识的输出明显减少,若有错误欢迎指正! 目录 一.关于集 ...

  9. 使用集成学习提升机器学习算法性能

    译者注:这篇文章是对 PythonWeekly 推荐的一篇讲集成模型的文章的翻译,原文为 Ensemble Learning to Improve Machine Learning Results,由 ...

最新文章

  1. 公司--超级链接跳转和表单提交,删除的表单提交和删除失败的提示信息
  2. 牛客题霸 [数组中出现次数超过一半的数字] C++题解/答案
  3. JDK 7和JDK 8中大行读取速度较慢的原因
  4. CMakeLists.txt使用boost库
  5. 运行与windows命令(cmd)的说明与示例
  6. 递归打印目录层次(java版)
  7. Spring Cloud Data Flow 2.0.1 GA 发布
  8. 解析新浪微博表情包的一套js代码
  9. 【数字通信】Matlab实现16QAM调制与解调,判决,误码率计算
  10. C++借助Eigen库实现矩阵开方(开根号)运算
  11. win10输入法变成繁体字的快捷键
  12. python判断图片是不是火车票_12306验证码图像识别程序源码-Python识别12306验证码 - PS下...
  13. markdown 设置目录跳转的简单方法
  14. October CMS - 快速入门 1 安装 1
  15. 【ELMAN回归预测】基于matlab天牛须算法优化ELMAN回归预测【含Matlab源码 1375期】
  16. 厦大C语言上机 1394 抛硬币
  17. 基于matlab的BCH编译码算法原理介绍与仿真分析
  18. 十二 iOS之 折叠图片
  19. Storm Metric
  20. DevStream 概览——开源 DevOps 工具链管理工具

热门文章

  1. 你好!基于Arduino控制的串口屏
  2. Lua语言在线代码运行编译工具推荐
  3. 优动漫PAINT中手绘稿扫描件的杂点清理方法
  4. 【Linux】centos桌面版关闭锁屏、屏幕常亮
  5. 在服务器上备份文件的命令行,使用 Stsadm 命令行工具备份服务器场 (Search Server 2008)...
  6. 【线性代数】正交投影
  7. 一位IT从业人员的心路历程 (转并修版)
  8. 苹果IOS免签分发 绿标免签封装 ios不显示顶部网址跳转设置
  9. android读取运动数据权限_各种手机使用金管家平安Run健康行运动步数上传不计步读取时怎么解决?...
  10. 【报告分享】2021美伊白皮书-阿里妈妈CBE(附下载)