分类目录:《深入理解机器学习》总目录


Boosting是一族可将弱学习器提升为强学习器的算法。这族算法的工作机制类似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器数目达到事先指定的值TTT,最终将这TTT个基学习器进行加权结合。

Boosting族算法最著名的代表是AdaBoost:

Adaboost算法
输入:
\qquad 训练集:D=(x1,y1),(x2,y2),⋯,(xN,yN)D = {(x_1, y_1), (x_2, y_2), \cdots, (x_N, y_N)}D=(x1​,y1​),(x2​,y2​),⋯,(xN​,yN​)
\qquad 基学习算法:LLL
\qquad 训练轮数:TTT
输出:
H(x)=sign(∑i=1Tαihi(x))\qquad H(x)=\text{sign}(\sum_{i=1}^T\alpha_ih_i(x))H(x)=sign(∑i=1T​αi​hi​(x))
算法:.
( 1 ) 初始化训练数据的权值分布:D1(x)=(w11,w12,⋯,w1N)=(1N,1m,⋯,1N)D_1(x)=(w_{11}, w_{12}, \cdots, w_{1N})=(\frac{1}{N}, \frac{1}{m}, \cdots, \frac{1}{N})D1​(x)=(w11​,w12​,⋯,w1N​)=(N1​,m1​,⋯,N1​)
( 2 ) for i=1,2,⋯,T\;i = 1, 2, \cdots, T\;i=1,2,⋯,T do
( 3 ) \quad使用具有DiD_iDi​权值分布的数据集DDD进行训练:hi=L(D,Di)h_i=L(D, D_i)hi​=L(D,Di​)
( 4 ) \quad计算hih_ihi​在训练集DDD上的分类错误率:ϵi=Px∼Di(hi(x)≠f(x))\epsilon_i=P_{x\sim D_i}(h_i(x)\neq f(x))ϵi​=Px∼Di​​(hi​(x)​=f(x))
( 5 ) \quad if ϵi>0.5\;\epsilon_i>0.5\;ϵi​>0.5 then
( 6 ) \qquad break
( 7 ) \quad计算弱学习器hih_ihi​的权重系数:αi=12ln⁡1−ϵiϵi\alpha_i=\frac{1}{2}\ln\frac{1-\epsilon_i}{\epsilon_i}αi​=21​lnϵi​1−ϵi​​
( 8 ) \quad更新训练数据的权值分布:Di+1(x)=Di(x)exp⁡(−αif(x)hi(x))ZiD_{i+1}(x)=\frac{D_i(x)\exp{(-\alpha_if(x)h_i(x))}}{Z_i}Di+1​(x)=Zi​Di​(x)exp(−αi​f(x)hi​(x))​
( 9 ) end for

其中,yi∈{+1,−1}y_i\in\{+1,-1\}yi​∈{+1,−1},fff是真实函数,DiD_iDi​是第iii轮训练数据的权重。

Adaboost算法有多种推导方式,比较容易理解的是基于“加性模型”,即基学习器的线性组合:
H(x)=sign(∑i=1Tαihi(x))H(x)=\text{sign}(\sum_{i=1}^T\alpha_ih_i(x))H(x)=sign(i=1∑T​αi​hi​(x))

来最小化指数损失函数:
l(H∣D)=Ex∼D[e−f(x)H(x)]l(H|D)=E_{x\sim D}[e^{-f(x)H(x)}]l(H∣D)=Ex∼D​[e−f(x)H(x)]

指数损失函数最小化,则分类错误率也将最小化。这说明指数损失函数是分类任务原本0/1损失函数的一致的替代损失函数。由于这个替代函数有更好的数学性质,例如它是连续可微函数,因此我们用它替代0/1损失函数作为优化目标。

在Adaboost算法中,第一个基分类器h1h_1h1​是通过直接将基学习算法用于初始数据分布而得;此后迭代地生成hih_ihi​和αi\alpha_iαi​,当基分类器hih_ihi​基于分布DiD_iDi​产生后,该基分类器的权重αi\alpha_iαi​应使得αihi\alpha_ih_iαi​hi​最小化指数损失函数:
l(αihi∣D)=Ex∼Di[e−f(x)αihi(x)]=e−αi(1−ϵi)+eαiϵil(\alpha_ih_i|D)=E_{x\sim D_i}[e^{-f(x)\alpha_ih_i(x)}]=e^{-\alpha_i}(1-\epsilon_i)+e^{\alpha_i}\epsilon_il(αi​hi​∣D)=Ex∼Di​​[e−f(x)αi​hi​(x)]=e−αi​(1−ϵi​)+eαi​ϵi​

考虑指数损失函数的导数:
∂l(αihi∣Di)∂αi=−e−αi(1−ϵi)+eαiϵi=0\frac{\partial l(\alpha_ih_i|D_i)}{\partial\alpha_i}=-e^{-\alpha_i}(1-\epsilon_i)+e^{\alpha_i}\epsilon_i=0∂αi​∂l(αi​hi​∣Di​)​=−e−αi​(1−ϵi​)+eαi​ϵi​=0

可解得:
αi=12ln⁡1−ϵiϵi\alpha_i=\frac{1}{2}\ln\frac{1-\epsilon_i}{\epsilon_i}αi​=21​lnϵi​1−ϵi​​

AdaBoost算法在获得Hi−1H_{i-1}Hi−1​之后样本分布将进行调整,使下一轮的基学习器hih_ihi​能纠正Hi−1H_{i-1}Hi−1​的一些错误。理想的hih_ihi​能纠正Hi−1H_{i-1}Hi−1​的全部错误,即最小化:
l(Hi−1+hi∣D)=Ex∼D[e−f(x)(Hi−1+hi)]l(H_{i-1}+h_i|D)=E_{x\sim D}[e^{-f(x)(H_{i-1}+h_i)}]l(Hi−1​+hi​∣D)=Ex∼D​[e−f(x)(Hi−1​+hi​)]

Boosting算法要求基学习器能对特定的数据分布进行学习,这可通过“重赋权法”(实施,即在训练过程的每一轮中,根据样本分布为每个训练样本重新赋予一个权重。对无法接受带权样本的基学习算法,则可通过“重样法”来处理,即在每一轮学习中,根据样本分布对训练集重新进行样,再用重样而得的样本集对基学习器进行训练。

一般而言,这两种做法没有显著的优劣差别需注意的是, Boosting算法在训练的每一轮都要检查当前生成的基学习器是否满足基本条件,例如检查当前基分类器是否是比随机猜测好,一旦条件不满足,则当前基学习器即被抛弃,且学习过程停止。在此种情形下,初始设置的学习轮数TTT也许还远未达到,可能导致最终集成中只包含很少的基学习器而性能不佳。若采用“重采样法”,则可获得“重启动”机会以避免训练过程过早停止,即在抛弃不满足条件的当前基学习器之后,可根据当前分布重新对训练样本进行采样,再基于新的采样结果重新训练出基学习器,从而使得学习过程可以持续到预设的TTT轮完成。

从偏差方差分解的角度看, Boosting主要关注降低偏差,因此 Boosting能基于泛化性能相当弱的学习器构建出很强的集成。

深入理解机器学习——集成学习(二):提升法Boosting与Adaboost算法相关推荐

  1. 机器学习 集成学习篇——python实现Bagging和AdaBOOST算法

    机器学习 集成学习篇--python实现Bagging和AdaBOOST算法 摘要 Bagging算法 Adaboost算法 摘要 本文通过python实现了集成学习中的Bagging和AdaBOOS ...

  2. 深入理解机器学习——集成学习(Ensemble Learning):基础知识

    分类目录:<深入理解机器学习>总目录 集成学习基于这样一种思想:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好.实际上,就是" ...

  3. 深入理解机器学习——集成学习(Ensemble Learning):袋装法Bagging

    分类目录:<深入理解机器学习>总目录 我们在<集成学习(一):基础知识>中提到,欲得到泛化性能强的集成,集成中的个体学习器应尽可能相互独立:虽然"独立"在现 ...

  4. 机器学习:集成学习之 Bagging、Boosting和AdaBoost

    Bagging.Boosting和AdaBoost(Adaptive Boosting)都是Ensemble learning的方法.集成学习其实就是有很多个分类器,概念就是三个臭皮匠,顶过诸葛亮. ...

  5. 机器学习-集成学习-梯度提升决策树(GBDT)

    目录 1. GBDT算法的过程 1.1 Boosting思想 1.2 GBDT原理 需要多少颗树 2. 梯度提升和梯度下降的区别和联系是什么? 3. GBDT的优点和局限性有哪些? 3.1 优点 3. ...

  6. python机器学习案例系列教程——集成学习(Bagging、Boosting、随机森林RF、AdaBoost、GBDT、xgboost)

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 可以通过聚集多个分类器的预测结果提高分类器的分类准确率,这一方法称为集成(Ensemble)学习或分类器组合(Classifier C ...

  7. (七)集成学习中-投票法Voting

    集成学习第一法宝:投票! 参考:DataWhale教程链接 集成学习(上)所有Task: (一)集成学习上--机器学习三大任务 (二)集成学习上--回归模型 (三)集成学习上--偏差与方差 (四)集成 ...

  8. 集成学习精讲之Boosting - SAP大神黄佳新作《零基础学机器学习》节选

    Boosting的意思就是提升,这是一族通过训练弱学习模型的肌肉将其提升为强学习模型的算法.要想在机器学习竞赛中追求卓越,Boosting是一种必须的存在.这是一个属于高手的技术. 图片来源于网上,侵 ...

  9. 机器学习 - [集成学习]Bagging算法的编程实现

    机器学习 - [集成学习] Bagging算法的编程实现 李俊才 的 CSDN 博客:https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343 ...

最新文章

  1. 数据科学家必须要掌握的5种聚类算法
  2. SQL server数据库日志满了怎么处理?
  3. anndroid ndk使用
  4. let const 命令
  5. python面试-10个Python面试常问的问题(小结)
  6. 统一代码段与非一致代码段
  7. java异常_Java的异常体系
  8. DL:深度学习算法(神经网络模型集合)概览之《THE NEURAL NETWORK ZOO》的中文解释和感悟(一)
  9. Openfire4源码部署到eclipse中并编译
  10. CentOS离线安装httpd服务
  11. 再有人问你为什么MySQL用B+树做索引,就把这篇文章发给她
  12. iOS重写和成员变量访问权限
  13. mysql 查看内核版本命令_Linux查看版本命令问题
  14. python kmeans聚类_K-means聚类算法的Python实现
  15. colspan会影响内部单元格宽度失效_冷轧轧辊失效原因分析及改进措施
  16. extjs 教程 java_ExtJS6.2学习
  17. Object-C 介绍
  18. 计算机地图制图 知识总结
  19. Go语言 常用日志记录方法
  20. NLP常见语言模型总结

热门文章

  1. 2020 最好的Linux网络监控工具(翻译)
  2. html数字动画效果,原生JavaScript代码实现数字更新的动画效果
  3. git执行任何操作都特别慢,怎么解决?
  4. 隐藏index.php
  5. GD32450i-EVAL学习笔记 6 - ADC
  6. 我用 pyhton 做了款可开淘宝店赚钱的工具
  7. 基于SSM框架的民宿预订系统的设计与实现
  8. (无导师学习神经网络)竞争神经网络、SOFM神经网络
  9. 梅科尔工作室-杨灿-鸿蒙笔记2
  10. AD账号属性的 PwdLastSet 和 PasswordLastSet 有什么区别?