Boosting,顾名思义,这是一个增强算法,而它增强的对象,就是机器学习中我们所熟知的学习器。在Valiant引入的PAC(Probably Approximately Correct,又称可能近似正确)中,学习器可被分为强学习器和弱学习器。其中,在处理二分类问题时,弱学习器被视为只比随机分类更好一点(即准确率略高于0.5)的分类器,而强分类器的准确率在90%以上。但是强学习器的获取要比弱学习器困难得多,而1989年Kearns&Valiant1提出了一个经典的理论问题:强可学习性和弱可学习性问题是否等价。如果该问题的答案是肯定的,那么就意味着所有的弱学习器都有被提升为强学习器的潜力。幸运的是,这问题答案在后来被Schapire证明是肯定的。由此,就有了弱学习器的增强过程。

  Boosting的基本想法就是给样本赋权,利用权值改变纠正弱学习器的错误。每一轮都会加入新的弱学习器,每轮过后,都会生成一个新的样本分布,那些被分错的样本,其关注度会有所增加。T轮过后,将所有的分类器结合,形成性能提升巨大的强学习器。后来关于Boosting类算法的改进,基本上也都是基于改变调整样本权值和分类器结合方式来的。

输入:样本分布D;基学习算法L;学习轮数T; D1=Dfort=,...T:ht=L(Dt);εt=Px∽Dt(ht(x)≠f(x));Dt+1=Adjust_Distribution(Dt,εt).⁣end输出: H(x)=Combine_Outputs({h1(x),...,ht(x)}).\begin{gathered} \fbox{ 输入:样本分布D;基学习算法L;学习轮数T; }\\ D_1=D \\ for\enspace t=,...T:\qquad\\ h_t=L(D_t);\\ \qquad\qquad\qquad \varepsilon _t=P_{x\backsim D_t}(h_t(x)\ne\ f(x));\\ \qquad\qquad\qquad\qquad\qquad D_{t+1}=Adjust\_Distribution(D_t,\varepsilon _t).\\ \!end\qquad\qquad\qquad \\ \fbox{ 输出: }\\ H(x)=Combine\_Outputs(\{h_1(x),...,h_t(x)\}). \end{gathered}  输入:样本分布D;基学习算法L;学习轮数T; ​D1​=Dfort=,...T:ht​=L(Dt​);εt​=Px∽Dt​​(ht​(x)​= f(x));Dt+1​=Adjust_Distribution(Dt​,εt​).end 输出: ​H(x)=Combine_Outputs({h1​(x),...,ht​(x)}).​

  在Boosting过程的基础上,Freund&Schapire2于1997年提出了Adaboost(Adaptive Boosting,又称自适应增强)算法,其经典版在2000年由Friedman3提出。

算法流程

   输入训练数据集D={(x1,y1),(x2,y2),(xN,yN)}D = \{ ( x_1 , y_1 ) , ( x_2 , y_2 ) , ( x _N , y_N ) \}D={(x1​,y1​),(x2​,y2​),(xN​,yN​)}其中,xi∈X,yi∈=−1,1x_i∈X,y_i∈=-1,1xi​∈X,yi​∈=−1,1迭代总次数为T

1、初始化权重分布,D1=(w1,1,w1,2,...,w1,i),w1,i=1N,i=1,2,...,ND_1=(w_{1,1},w_{1,2},...,w_{1,i}),w_{1,i}=\frac{1}{N},i=1,2,...,ND1​=(w1,1​,w1,2​,...,w1,i​),w1,i​=N1​,i=1,2,...,N
2、迭代t=1,2,…,T

  a.在分布D_t下从D中训练分类器h_t(x)
  b.计算分类器h_t的错误率εt=∑i=1Nwt,iI(ht(x)≠yi)\varepsilon _t=\sum\limits_{i=1}^{N} w_{t,i}I\big(h_t(x)\ne y_i\big)εt​=i=1∑N​wt,i​I(ht​(x)​=yi​)
  c.计算h_t的权重αt=12ln(1−εtεt)\alpha_t=\frac{1}{2}ln(\frac{1-\varepsilon_t}{\varepsilon_t}) αt​=21​ln(εt​1−εt​​)
  d.更新权重分布,其中Z_t为满足分布条件的归一化因子
wt+1,i=wt,iZtexp(−αtyiht(xi))w_{t+1,i}=\frac{w_{t,i}}{Z_t}exp\big(-\alpha_ty_ih_t(x_i)\big)wt+1,i​=Zt​wt,i​​exp(−αt​yi​ht​(xi​))
Zt=∑i=1Nwt,iexp(−αtyiht(xi))Z_t= \sum\limits_{i=1}^{N}w_{t,i}exp(-\alpha_ty_ih_t(x_i))Zt​=i=1∑N​wt,i​exp(−αt​yi​ht​(xi​))
3、整合分类器H(x)=sign(∑i=1Tαtht(x))H(x)=sign\big(\sum\limits_{i=1}^{T}\alpha_th_t(x)\big) H(x)=sign(i=1∑T​αt​ht​(x))
  此方法是通过重赋值的策略,在每一轮根据相应的分布对训练样本赋权来完成的,而对于不能利用样本权值学习的算法,可以采用重采样的方法,即每一轮根据相应的分布对训练样本进行采样。
  对于算法性能,经过证明,Adaboost最终的集成分类器的错误率存在着上界,同时,在迭代之中,错误率呈指数趋势减少,说明Adaboost在降低误差,将弱分类器训练整合为强学习器方面有着很好的表现。不过,这又引出一个问题,Adaboost会过拟合吗?答案是会的。Grove&Schuurmans4在1998年证明了在足够多轮之后,Adaboost也会过拟合,所以其只是在通常情况下不会过拟合。对于多少轮后会过拟合,Grove&Schuurmans提出了一个学习轮数T的上界。

存在问题

  虽然Adaboost有着很好的泛化性能,但是由于其采用的是对样本重赋权来实现纠错,其对噪声很敏感。在学习噪声数据时,Adaboost仍然会尽力去拟合这些噪声,并且由于不断错误分类,还会使得噪声数据的权重不断加大,降低分类器预测能力。一个比较好的解决办法是直接为样本的权重设定一个上界,具体改进可参考Domingo&Watanabe5于2000年提出的MadaBoost算法。

多分类问题

  以上讨论的是针对于二分类问题的Adaboost,以下我们开始讨论Adaboost在多分类问题中的应用。Adaboost在多分类问题上应用所面对的最大问题,便是对弱分类器的约束过强。在二分类问题中,我们对弱分类器的要求是其分类准确率要比0.5略大,但是在多分类中,1/N,N>2,这明显达不到要求。关于这一点,比较常用的解法是将多分类任务分解为多个二分类任务,包括有“一对其余”和“一对一”分解。“一对其余”就是将N类多分类任务分成N个二分类任务,第i个二分类任务仅判断其是否属于i类。代表算法有Schapire&Singer6的Adaboost.MH。“一对一”方法则将N个多分类任务分成N*(N-1)/2个二分类任务,第i个二分类任务仅判断其是属于第i类还是第j类。代表算法有Freund&Schapire的Adaboost.M2。

参考资料


  1. Ehrenfeucht A, Haussler D, Kearns M, et al. A general lower bound on the number of examples needed for learning[J]. Information and Computation, 1989, 82(3): 247-261. ↩︎

  2. Freund Y, Schapire R E. A decision-theoretic generalization of on-line learning and an application to boosting[J]. Journal of computer and system sciences, 1997, 55(1): 119-139. ↩︎

  3. Friedman J, Hastie T, Tibshirani R. Special invited paper. additive logistic regression: A statistical view of boosting[J]. Annals of statistics, 2000: 337-374. ↩︎

  4. Grove A J, Schuurmans D. Boosting in the limit: Maximizing the margin of learned ensembles[C]//AAAI/IAAI. 1998: 692-699. ↩︎

  5. Domingo C, Watanabe O. MadaBoost: A modification of AdaBoost[C]//COLT. 2000: 180-189 ↩︎

  6. Allwein E L, Schapire R E, Singer Y. Reducing multiclass to binary: A unifying approach for margin classifiers[J]. Journal of machine learning research, 2000, 1(Dec): 113-141. ↩︎

详解AdaBoost相关推荐

  1. Sklearn参数详解—Adaboost

    总第112篇 前言 今天这篇讲讲集成学习,集成学习就是将多个弱学习器集合成一个强学习器,你可以理解成现在有好多道判断题(判断对错即01),如果让学霸去做这些题,可能没啥问题,几乎全部都能做对,但是现实 ...

  2. 机器学习第九篇:详解Adaboost算法

    01|基本概念: 提升方法的基本思想:对于任何一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比任何一个专家单独的判断好. 先来看两个概念:强可学习和弱可学习. 在概率近似正确学习的框 ...

  3. 傻子都能看懂的——详解AdaBoost原理

    之前纠结是否要离开CSDN,最近还是决定留下来继续. 关于Boost 集成学习中有两个重要概念,分别为Bagging和Boost.其中Boost也被称为增强学习或提升法,是一种重要的集成学习方法,它能 ...

  4. 机器学习经典算法详解及Python实现--元算法、AdaBoost

    http://blog.csdn.net/suipingsp/article/details/41822313 第一节,元算法略述 遇到罕见病例时,医院会组织专家团进行临床会诊共同分析病例以判定结果. ...

  5. Sklearn参数详解—聚类算法

    总第115篇 前言 聚类是一种非监督学习,是将一份给定数据集划分成k类,这一份数据集可能是某公司的一批用户,也可能是某媒体网站的一系列文章,如果是某公司的一批用户,那么k-means做的就是根据用户的 ...

  6. SKlearn参数详解—随机森林

    总第114篇 前言 随机森林(RandomForest,简称RF)是集成学习bagging的一种代表模型,随机森林模型正如他表面意思,是由若干颗树随机组成一片森林,这里的树就是决策树. 在GBDT篇我 ...

  7. Sklearn参数详解—GBDT

    总第113篇 前言 这篇介绍Boosting的第二个模型GBDT,GBDT和Adaboost都是Boosting模型的一种,但是略有不同,主要有以下两点不同: GBDT使用的基模型是CART决策树,且 ...

  8. AdaBoost算法详解与python实现

    AdaBoost算法详解与python实现 https://tangshusen.me/2018/11/18/adaboost/

  9. haar分类器详解(Haar特征,积分图,adaboost算法,筛选式级联分类器),DCG介绍 --文献阅读报告《基于素描对视频的人脸识别研究》

    基于素描对视频的人脸识别--haar分类器详解,haar特征,adaboost,级联强分类器,积分图,DCG 背景 算法总体流程 1.预处理--识别出人脸并将人脸图像标准化 haar特征 积分图--加 ...

最新文章

  1. Scrapy学习教程
  2. jdk的安装和环境的配置
  3. 解决eclipse显示jar源代码中文乱码问题
  4. 数据中心怎么关机?光有UPS还不够
  5. 2020-11-29(准备考试)
  6. [ZJOI2014] 星系调查(树上差分 + 数学推式子)
  7. 集成Springboot----ElasticSearch
  8. OpenShift 4 Hands-on Lab (4) - 用ImageStream操作Image
  9. STL中vector小结
  10. CodeBlocks配色方案设置(简单易懂)
  11. 解决VScode无法输出中文的问题
  12. Linux中的atim、mtime、ctime
  13. git log --stat的使用说明
  14. java 加锁_Java中的重重“锁”事
  15. 调用DLL找不到函数名或者函数乱码问题
  16. Word交叉引用连续引用多个参考文献
  17. 知网研学不同电脑端同步无效问题
  18. 计算机软件系统的三个层次,计算机软硬件系统
  19. 不同版本的centos默认的ks.cfg
  20. 微美全息正式成立“全息元宇宙事业部”;孩之宝旗下威世智发布一系列万智牌产品;区块链专家赵亮正式加盟宏桥高科 | 全球TMT...

热门文章

  1. Nginx防盗链的配置
  2. Vue动态粒子特效插件(背景线条吸附动画)
  3. JavaScript给元素添加class属性
  4. Word 替换功能如何删去不间断空格
  5. nginx http proxy模块缓冲区管理
  6. DDD实践_如何使用DDD设计代码模型
  7. 北京开科唯识技术有限公司外派恒丰银行面试笔试题
  8. Linux驱动开发(从零开始编写一个驱动程序)
  9. 向web网页填写内容 自动登录
  10. halcon测量:用卡尺找边