AdaBoost 算法

集成学习

随机森林

AdaBoost 算法

提升树

梯度提升树(GBDT)

XGBoost



Boosting 系列算法中,最具代表的是 AdaBoost 算法。该算法即可用于分类,也可用于回归。


一、AdaBoost 分类算法

假设二分类训练集

T={(x1,y1),(x2,y2),...,(xN,yN)}

xiXRnRnn 维),yiY={1,1}



1. 算法流程

输入:T={(x1,y1),(x2,y2),...,(xN,yN)}xiRnRnn 维),yi{1,1},弱学习器算法;

输出:最终分类器 G(x)

初始化权值

D1=(ω11,...ω1i,...ω1N),    ω1i=1N,    i=1,2,...,M

② 对 m=1,2,...M

​ (a) 使用权值分布 Dm 的训练集学习,得到基本分类器

Gm(x){1,1}

​ (b) 计算 Gm(x)分类误差率

(1)em=i=1MP(Gm(xi)yi)=i=1NωmiI(Gm(xi)yi)

​ (c) 计算 Gm(x)系数

(2)αm=12log1emem

这里的对数为自然对数。

​ (d) 更新权值分布

(3)Dm+1=(ωm+1,1,...,ωm+1,i,...,ωm+1,N)(4)ωm+1,i=ωmie(αm yi Gm (xi))Zm(5)Zm=i=1Nωmie(αm yi Gm (xi))

Zm 是规范化因子。

③ 构建基本分类器的线性组合

(6)f(x)=m=1MαmGm(x)

最终分类器

(7)G(x)=sign(f(x))


以上是 AdaBoost 二分类问题的算法流程,对于 AdaBoost 多分类问题,原理与二分类类似,最主要区别在基分类器的系数上。比如 AdaBoost   SAMME​ 算法,它的基分类器系数

αm=12log1emem+log(R1)

其中 R 为类别数。如果是二分类,R=2



2. 算法分析

I(Gm(xi)yi) 中,当 Gm(xi)=yi 时为 0Gm(xi)yi 时为 1

0em0.5

因为当 em0.5 会自动转换为 em0.5

x 0 1 2 3
y 1 1 1 1
Gm(x) -1 -1 -1 1
错误 错误 错误 正确

自动转换为:

x 0 1 2 3
y 1 1 1 1
Gm(x) 1 1 1 -1
正确 正确 正确 错误

③ 由下图可得,αmem 减小而增大。

0em0.521em11em10log1emem0αm



3. 算法实例

1给定训练集,用 AdaBoost 算法学习一个强分类器。

序号 1 2 3 4 5 6 7 8 9 10
x 0 1 2 3 4 5 6 7 8 9
y 1 1 1 -1 -1 -1 1 1 1 -1

解:① 初始化权值

D1=(ω11,ω12,...ω110)ω1i=0.1,    i=1,2,...,M


② 对 m=1

​ (a) 使用权值分布 D1 的训练集学习,阈值 v=2.5 时分类误差率最大,得到基本分类器

G1(x)={1,x<2.51,x>2.5

​ (b) G1(x) 的分类误差率 e1=P(G1(xi)yi)=0.3

​ (c) G1(x) 的系数:α1=12log1e1e1=0.4236

​ (d) 更新权值分布:

D2=(ω21,...,ω2i,...ω210)ω2i=ω1ie(α1yiG1(xi))Z1D2=(0.07143,0.07143,0.07143,0.07143,0.07143,0.07143,0.16667,0.16667,0.16667,0.07143)f1(x)=0.4236G1(x)

分类正确的样本权重更新计算:w1ie(α1yiG1(xi))=0.1×e(0.4263×1×1)=0.065469

分类错误的样本权重更新计算:w1ie(α1yiG1(xi))=0.1×e(0.4263×1×1)=0.152745

Z1=0.065469×7+0.152748×3=0.916515

分类正确的样本更新后的权重:ω2i=0.0654690.916515=0.071432

分类错误的样本更新后的权重:ω2i=0.1527450.916515=0.166659

分类器 sign[f1(x)] 有三个误分类点。


m=2

​ (a) 使用权值分布 D2 的训练集学习,阈值 v=8.5 时分类误差率最大,得到基本分类器

G2(x)={1,x<8.51,x>8.5

​ (b) G2(x) 的分类误差率 e2=P(G2(xi)yi)=0.2143

​ (c) G2(x) 的系数:α2=12log1e2e2=0.6496

​ (d) 更新权值分布:

D3=(0.0455,0.0455,0.0455,0.1667,0.1667,0.1667,0.1060,0.1060,0.1060,0.0455)f2(x)=0.4236G1(x)+0.6496G2(x)

分类器 sign[f2(x)] 有三个误分类点。


m=3

​ (a) 使用权值分布 D3 的训练集学习,阈值 v=5.5 时分类误差率最大,得到基本分类器

G3(x)={1,x<5.51,x>5.5

​ (b) G3(x) 的分类误差率 e3=P(G3(xi)yi)=0.1820

​ (c) G3(x) 的系数:α3=12log1e3e3=0.7514

​ (d) 更新权值分布:

D3=(0.125,0.125,0.125,0.102,0.102,0.102,0.065,0.065,0.065,0.125)f3(x)=0.4236G1(x)+0.6496G2(x)+0.7514G3(x)

分类器 sign[f2(x)] 的误分类点为0。


于是最终分类器

G(x)=sign[f3(x)]=sign[0.4236G1(x)+0.6496G2(x)+0.7514G3(x)]



二、AdaBoost 分类算法误差分析

AdaBoost 能在学习过程中不断减少训练误差,即训练集上的分类误差率。

定理 1 AdaBoost 算法最终分类器的训练误差界为

(8)1Ni=1NI(G(xi)yi)1Nie(yif(xi))=mZm

G(x)f(x)Zm 分别由式 (7)(6)(5) 给出。

证明:G(xi)yi 时,yif(xi)<0,因而 e(yif(xi))1。推到出前半部分。

后半部分推到用到 Zm 的定义式 (5)(4) 的变形:

ωmie(αm yi Gm (xi))=Zmωm+1,i

1Niexp(yif(xi))=1Niexp(m=1MαmyiGm(xi))=iw1im=1Mexp(αmyiGm(xi))=Z1iw2im=2Mexp(αmyiGm(xi))=Z1Z2iw3im=3Mexp(αmyiGm(xi))==Z1Z2ZM1iwMiexp(αMyiGM(xi))=m=1MZm

这说明,每一轮选取适当的 Gm 使 Zm 最小,从而使训练误差下降最快。

定理 2 二分类问题 AdaBoost 的训练误差界

m=1MZm=m=1M[2em(1em)]=m=1M(14γm2)exp(2m=1Mγm2)

推论 1:如果存在 γ>0,对所有 mγmγ,则

1Ni=1NI(G(xi)yi)e(e2Mγ2   )

表明此条件下 AdaBoost 的训练误差是以指数速率下降。

注意:AdaBoost 不需要知道下界 γ。该算法具有适应性,即能适应弱分类器各自的训练误差。这是它名称的由来,AdaAdaptive 的简写。



三、AdaBoost 分类算法解释

AdaBoost 分类算法还有另一种解释,可认为 AdaBoost 分类算法是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法二分类学习算法



1. 前项分布算法

加法模型

(9)f(x)=m=1Mβmb(x;γm)

b(x;γm) 为基函数,γm 为基函数的参数,βm 为基函数的系数。显然,式 (6) 是加法模型。

在给定训练集及损失函数 L(y,f(x)) 的条件下,学习加法模型 f(x)​ 成为经验风险极小化即损失函数极小化问题:

(10)minβm ,γm m=1NL(yi,m=1Mβmb(xi;γm))

前向分步算法思想:因为学习的是加法模型,如果能够从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数式,那么就可以简化优化的复杂度。具体地,每步只需优化如下损失函数:

(11)minβ,γi=1NL(yi,βb(xi;γ))

给定训练集 T={(x1,y1),(x2,y2),...,(xN,yN)}xiXRnRnn 维),yiY={1,1}。损失函数 L(y,f(x)) 和基函数的集合 {b(x;γ)},学习加法模型 f(x) 的前向分步算法如下。



前向分布算法:

输入:训练集 T={(x1,y1),(x2,y2),...,(xN,yN)},损失函数 L(y,f(x)) 和基函数集 {b(x;γ)}

输出:加法模型 f(x)

① 初始化 f0(x)=0

② 对 m=1,2,...,M

​ (a) 极小化损失函数

(βm,γm)=argminβ,γi=1NL(yi,fm1(xi)+βb(xi;γ))

得到参数 βm,γm

​ (b) 更新

fm(x)=fm1(x)+βmb(x;γm)

③ 得到加法模型

f(x)=fM(x)=m=1Mβmb(x;γm)

这样,前向分步算法将同时求解从 m=1M 所有参数 βm,γm 的优化问题简化为逐次求解各个 βm,γm 的优化问题。



2. 前向分步算法与 AdaBoost 分类算法

定理 3AdaBoost 分类算法是前向分布算法的特例。这时,模型是由基本分类器组成的加法模型损失函数是指数函数

求证:AdaBoost 算法基分类器的系数为 αm=12log1emem

证明:假设经过 m1 轮迭代,得到弱分类器 fm1(x),根据前向分布算法,有:

fm=fm1(x)+αmGm(x)

AdaBoost 的损失函数是指数损失,则有:

L=i=1Ne(yi fm (xi))=i=1Ne(yi (fm1   (xi)+αm Gm))

因为 fm1(x) 已知,所以将其移到前面:

L=i=1Nw¯m,i e(yi αm Gm (xi))

其中,w¯m,i=e(yi (fm1  (x))) 是每轮迭代的样本权重,证明化简如下:

w¯m,i=e(yi (fm1   (xi)+αm1   Gm1   (xi)))=w¯m1,i e(yi αm1   Gm1   (xi))

继续化简 L

L=i=1Nw¯m,i e(yi αi Gm (xi))=yi=Gm (xi)w¯m,i eαm+yiGm (xi)w¯m,i eαm=i=1Nw¯m,i(yi=Gm (xi) w¯m,ii=1N w¯m,i eαm+yiGm (xi) w¯m,ii=1N w¯m,i eαm)

重写 L

L=Ni=1wm,i((1em)e(αm )+eme(αm ))

αm 求偏导,令其为 0,则有:

αm=12log1emem



四、AdaBoost 回归算法

AdaBoost 回归算法



五、AdaBoost 算法正则化

为防止 AdaBoost 过拟合,通常加入正则化项,这个正则化通常称为步长(learning rate)。定义为 ν

对于弱学习器的迭代,

fm(x)=fm1(x)+αmGm(x)

加上正则化项,

fm(x)=fm1(x)+ναmGm(x)

其中 0<ν1

对于同样的训练集,较小的 ν 意味需要更多的弱学习器、迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。



六、AdaBoost 小结

AdaBoost 算法弱学习器通常是决策树和神经网络。对于决策树,AdaBoost 分类用 CART 分类树,AdaBoost 回归用 CART 回归树。

AdaBoost 优点:

  • 作为分类器时,分类精度高。
  • 可以使用各种回归分类模型构建弱学习器。
  • 不容易过拟合。

AdaBoost 缺点:

  • 对异常数据敏感,异常数据在迭代中会获得较高的权重。影响最终强学习器的预测准确性。


posted @   做梦当财神  阅读(514)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示