AdaBoost

AdaBoost

AdaBoost是典型的Boosting算法,即找到相对容易的弱学习算法,然后通过反复学习得到一系列弱分类器,组合这些弱分类器得到一个强分类器。Boosting算法要涉及到两个部分,加法模型和前向分步算法。

  1. 加法模型就是说强分类器由一系列弱分类器线性相加而成。
  2. 前向分步就是说在训练过程中,下一轮迭代产生的分类器是在上一轮的基础上训练得来的。

由于采用的损失函数不同,Boosting算法也因此有了不同的类型,AdaBoost就是损失函数为指数损失的Boosting算法

流程

输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2),(x_N,y_N)\} T={(x1,y1),(x2,y2),(xN,yN)},其中, x i ∈ X ⊆ R n x_i∈X⊆R^n xiXRn y i ∈ Y = − 1 , 1 y_i∈Y={-1,1} yiY=1,1,迭代次数M

a. 初始化训练样本的权值分布: D 1 = ( w 1 , 1 , w 1 , 2 , … , w 1 , i ) , w 1 , i = 1 N , i = 1 , 2 , … , N D_1=(w_{1,1},w_{1,2},…,w_{1,i}),w_{1,i}=\frac{1}{N},i=1,2,…,N D1=(w1,1,w1,2,,w1,i),w1,i=N1,i=1,2,,N
b. 对于 m = 1 , 2 , … , M m=1,2,…,M m=1,2,,M

  1. 使用具有权值分布 D m D_m Dm的训练数据集进行学习,得到弱分类器 G m ( x ) G_m(x) Gm(x)
  2. 计算 G m ( x ) G_m(x) Gm(x)在训练数据集上的分类误差率 e m = ∑ i = 1 N w m , i I ( G m ( x i ) ≠ y i ) e_m=\sum_{i=1}^Nw_{m,i} I(G_m (x_i )≠y_i ) em=i=1Nwm,iI(Gm(xi)=yi)
  3. 计算 G m ( x ) G_m(x) Gm(x)在强分类器中所占权重 α m = 1 2 l o g 1 − e m e m α_m=\frac{1}{2}log \frac{1-e_m}{e_m} αm=21logem1em
  4. 更新训练数据集的权值分布, z m z_m zm是归一化因子,可将样本概率分布和为1 w m + 1 , i = w m , i z m e x p ⁡ ( − α m y i G m ( x i ) ) , i = 1 , 2 , … , 10 w_{m+1,i}=\frac{w_{m,i}}{z_m}exp⁡(-α_m y_i G_m (x_i )),i=1,2,…,10 wm+1,i=zmwm,iexp(αmyiGm(xi))i=1,2,,10
    z m = ∑ i = 1 N w m , i e x p ⁡ ( − α m y i G m ( x i ) ) z_m=\sum_{i=1}^Nw_{m,i}exp⁡(-α_m y_i G_m (x_i )) zm=i=1Nwm,iexp(αmyiGm(xi))

c. 最终分类器
F ( x ) = s i g n ( ∑ i = 1 N α m G m ( x ) ) F(x)=sign(\sum_{i=1}^Nα_m G_m (x)) F(x)=sign(i=1NαmGm(x))

证明与推导

adaboost的损失函数为指数函数:
L ( y , f ( x ) ) = e x p [ − y f ( x ) ] L(y,f(x))=exp[-yf(x)] L(y,f(x))=exp[yf(x)]
对于分类模型而言,上述损失函数,在分类正确的时候,指数部分为负数;在分类错误的时候,指数部分为正数,符合损失函数的意义。
前向分步为: f m ( x ) = f m − 1 ( x ) + α m G m ( x ) f_m(x)=f_{m-1}(x)+\alpha_mG_m(x) fm(x)=fm1(x)+αmGm(x)
将前向分步代入损失函数,可得:
L o s s = ∑ i = 1 N e x p ⁡ ( − y i f m ( x i ) ) = ∑ i = 1 N e x p ⁡ ( − y i ( f m − 1 ( x i ) + α m G m ( x i ) ) ) Loss=\sum_{i=1}^Nexp⁡(-y_i f_m (x_i ))=\sum_{i=1}^Nexp⁡(-y_i (f_{m-1} (x_i )+α_m G_m (x_i ))) Loss=i=1Nexp(yifm(xi))=i=1Nexp(yi(fm1(xi)+αmGm(xi)))此时 f m − 1 ( x ) f_{m-1}(x) fm1(x)已知,即:

L o s s = ∑ i = 1 N w m , i ~ e x p ⁡ ( − y i α m G m ( x i ) ) Loss=\sum_{i=1}^N\widetilde{w_{m,i}} exp⁡(-y_i α_m G_m (x_i )) Loss=i=1Nwm,i exp(yiαmGm(xi)) w m , i ~ = e x p ⁡ ( − y i ( F m − 1 ( x ) ) ) \widetilde{w_{m,i}}=exp⁡(-y_i (F_{m-1} (x))) wm,i =exp(yi(Fm1(x)))
于是分类器 G m ( x ) G_m(x) Gm(x)和这个分类器的权重 α m \alpha_m αm 可以表示成:
在这里插入图片描述
先求 G m ( x ) G_m(x) Gm(x),分类器的权重可以认为是一个确定的数, G m ( x ) G_m(x) Gm(x)是使得分错的(带权重的)样本里损失函数最小的那个,可以写成:
在这里插入图片描述
得到 G m ∗ ( x ) G^*_m(x) Gm(x)以后,求 α m ∗ \alpha^*_m αm
在这里插入图片描述
把上式对 α 求导,再令导函数为 0 ,得
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更新权重
在这里插入图片描述

相关考点

  1. Adaboost 由于采用boosting算法,而Boosting 算法会倾向于一直分错的样本,如果样本中有离群的错误样本,boosting就会出现效果不好的情况。即Adaboost对离群值、异常值敏感。
  2. Adaboost和GBDT的异同点
    (1) 关注点:分错权值,残差:Adaboost每轮学习的一个基本学习器是通过改变样本的权值,关注上轮分类错误的样本的权值,以逐步减少在训练集上的分类误差率。而GBDT每轮学习一个基本学习器是通过改变输出值,每轮拟合的值为真实值与已有的加法模型的差值(即残差)。
    (2) 异常点: adaboost存在异常点敏感的问题, gbdt一定程度上优化了adaboost异常点敏感的问题,但是存在难以并行的缺点
    (3)树: GBDT无论是进行分类还是回归问题,都用的CART回归树,adaboost对分类问题用二叉分类树,回归问题用二叉回归树。
    (4)方差偏差: 两者的目标都是优化偏差bias,必然导致训练出来的数据方差var的不稳定

实战

https://blog.csdn.net/FontThrone/article/details/78834807
https://louisscorpio.github.io/2017/11/28/%E4%BB%A3%E7%A0%81%E5%AE%9E%E6%88%98%E4%B9%8BAdaBoost/

  • 0
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值