Boosting Adaboost

在boosting系列算法中, Adaboost是最著名的算法之一。Adaboost既可以用作分类,也可以用作回归。

分类

  1. 训练集样本: T = { ( x , y 1 ) , ( x 2 , y 2 ) , . . . ( x m , y m ) } T=\{(x_,y_1),(x_2,y_2), ...(x_m,y_m)\} T={(x,y1),(x2,y2),...(xm,ym)}
    训练集在第k个弱学习器的输出权重为 D ( k ) = ( w k 1 , w k 2 , . . . w k m ) ;      w 1 i = 1 m ;      i = 1 , 2... m D(k) = (w_{k1}, w_{k2}, ...w_{km}) ;\;\; w_{1i}=\frac{1}{m};\;\; i =1,2...m D(k)=(wk1,wk2,...wkm);w1i=m1;i=1,2...m
    二元分类问题,输出为{-1,1}

  2. 第k个弱分类器 G k ( x ) G_k(x) Gk(x)在训练集上的加权误差率为 e k = P ( G k ( x i ) ≠ y i ) = ∑ i = 1 m w k i I ( G k ( x i ) ≠ y i ) e_k = P(G_k(x_i) \neq y_i) = \sum\limits_{i=1}^{m}w_{ki}I(G_k(x_i) \neq y_i) ek=P(Gk(xi)=yi)=i=1mwkiI(Gk(xi)=yi)

  3. 获得了第k个弱分类器分类的误差率 (<0.5),为了使第k+1个分类器更加robust,应该增加错分样本的权重,降低正确分类样本的权重,使其最终能势均力敌。
    ∑ i = 1 m 1 w ( k + 1 ) i I ( G k + 1 ( x i ) ≠ y i ) ∗ d = ∑ i = 1 m 2 w ( k + 1 ) i I ( G k + 1 ( x i ) = y i ) / d \sum\limits_{i=1}^{m_1}w_{(k+1)i}I(G_{k+1}(x_i) \neq y_i)*d= \sum\limits_{i=1}^{m_2}w_{(k+1)i}I(G_{k+1}(x_i) = y_i)/d i=1m1w(k+1)iI(Gk+1(xi)=yi)d=i=1m2w(k+1)iI(Gk+1(xi)=yi)/d
    解得 d = e α k d=e^{\alpha_k} d=eαk

    α k = 1 2 l o g 1 − e k e k \alpha_k = \frac{1}{2}log\frac{1-e_k}{e_k} αk=21logek1ek

  4. 假设第k个弱分类器的样本集权重系数为 D ( k ) = ( w k 1 , w k 2 , . . . w k m ) D(k) = (w_{k1}, w_{k2}, ...w_{km}) D(k)=(wk1,wk2,...wkm),则对应的第k+1个弱分类器的样本集权重系数为
    w k + 1 , i = w k i Z K e x p ( − α k y i G k ( x i ) ) w_{k+1,i} = \frac{w_{ki}}{Z_K}exp(-\alpha_ky_iG_k(x_i)) wk+1,i=ZKwkiexp(αkyiGk(xi))
    Z k Z_k Zk是规范化因子,使更新后的权重和为1:
    Z k = ∑ i = 1 m w k i e x p ( − α k y i G k ( x i ) ) Z_k = \sum\limits_{i=1}^{m}w_{ki}exp(-\alpha_ky_iG_k(x_i)) Zk=i=1mwkiexp(αkyiGk(xi))
    如果第i个样本分类错误,则 y i G k ( x i ) ) < 0 y_iG_k(x_i))<0 yiGk(xi))<0,导致样本的权重在第k+1个弱分类器中增大,如果分类正确,则权重在第k+1个弱分类器中减少

  5. Adaboost分类采用的是加权表决法,最终的强分类器为 f ( x ) = s i g n ( ∑ k = 1 K α k G k ( x ) ) f(x) = sign(\sum\limits_{k=1}^{K}\alpha_kG_k(x)) f(x)=sign(k=1KαkGk(x))

回归

  1. 对于第k个弱学习器,计算在训练集上的最大误差 E k = m a x ∣ y i − G k ( x i ) ∣    i = 1 , 2... m E_k= max|y_i - G_k(x_i)|\;i=1,2...m Ek=maxyiGk(xi)i=1,2...m
    然后计算每个样本的相对误差 e k i = ∣ y i − G k ( x i ) ∣ E k e_{ki}= \frac{|y_i - G_k(x_i)|}{E_k} eki=EkyiGk(xi)
    如果用平方误差 e k i = ( y i − G k ( x i ) ) 2 E k 2 e_{ki}= \frac{(y_i - G_k(x_i))^2}{E_k^2} eki=Ek2(yiGk(xi))2
    如果用指数误差 e k i = 1 − e x p ( − ∣ y i − G k ( x i ) ∣ E k ) e_{ki}= 1 - exp(\frac{-|y_i - G_k(x_i)|}{E_k}) eki=1expEkyiGk(xi)

  2. 第k个弱学习器的误差率 e k = ∑ i = 1 m w k i e k i e_k = \sum\limits_{i=1}^{m}w_{ki}e_{ki} ek=i=1mwkieki

  3. 弱学习器权重系数𝛼 α k = e k 1 − e k \alpha_k =\frac{e_k}{1-e_k} αk=1ekek

  4. 第k+1个弱学习器的样本集权重系数为 w k + 1 , i = w k i Z k α k 1 − e k i w_{k+1,i} = \frac{w_{ki}}{Z_k}\alpha_k^{1-e_{ki}} wk+1,i=Zkwkiαk1eki
    规范化因子: Z k = ∑ i = 1 m w k i α k 1 − e k i Z_k = \sum\limits_{i=1}^{m}w_{ki}\alpha_k^{1-e_{ki}} Zk=i=1mwkiαk1eki

  5. 最终的强回归器为 f ( x ) = G k ∗ ( x ) f(x) =G_{k^*}(x) f(x)=Gk(x)
    k*即 l n 1 α k , k = 1 , 2 , . . . . K ln\frac{1}{\alpha_k}, k=1,2,....K lnαk1,k=1,2,....K中位数所对应的分类器。

损失函数的优化

上方说明了Adaboost的弱学习器权重系数公式和样本权重的更新,接着说分类器的损失函数及其优化。

  • Adaboost损失函数为指数函数,即每个分类器损失函数为 a r g    m i n    ⏟ α , G ∑ i = 1 m e x p ( − y i f k ( x ) ) \underbrace{arg\;min\;}_{\alpha, G} \sum\limits_{i=1}^{m}exp(-y_if_{k}(x)) α,G argmini=1mexp(yifk(x))
  • 利用前向分步学习算法的关系可以得到损失函数为 ( α k , G k ( x ) ) = a r g    m i n    ⏟ α , G ∑ i = 1 m e x p [ ( − y i ) ( f k − 1 ( x ) + α G ( x ) ) ] (\alpha_k, G_k(x)) = \underbrace{arg\;min\;}_{\alpha, G}\sum\limits_{i=1}^{m}exp[(-y_i) (f_{k-1}(x) + \alpha G(x))] (αk,Gk(x))=α,G argmini=1mexp[(yi)(fk1(x)+αG(x))]

AdaBoost分类问题算法流程

二元分类

输入为样本集 T = { ( x , y 1 ) , ( x 2 , y 2 ) , . . . ( x m , y m ) } T=\{(x_,y_1),(x_2,y_2), ...(x_m,y_m)\} T={(x,y1),(x2,y2),...(xm,ym)},输出为{-1, +1},弱分类器迭代次数K。
输出为最终的强分类器𝑓(𝑥)

  1. 初始化样本集权重为 D 1 = ( w 11 , w 12 , . . . w 1 m ) ;      w 1 i = 1 m ;      i = 1 , 2... m D_1 = (w_{11}, w_{12}, ...w_{1m}) ;\;\; w_{1i}=\frac{1}{m};\;\; i =1,2...m D1=(w11,w12,...w1m);w1i=m1;i=1,2...m
  2. 对于k = 1, 2,…,K:
    - 使用具有权重 D k D_k Dk的样本集来训练数据,得到弱分类器 G k ( x ) G_k(x) Gk(x)
    - 计算 G k ( x ) G_k(x) Gk(x)的分类误差率 e k = P ( G k ( x i ) ≠ y i ) = ∑ i = 1 m w k i I ( G k ( x i ) ≠ y i ) e_k = P(G_k(x_i) \neq y_i) = \sum\limits_{i=1}^{m}w_{ki}I(G_k(x_i) \neq y_i) ek=P(Gk(xi)=yi)=i=1mwkiI(Gk(xi)=yi)
    - 计算弱分类器的系数 α k = 1 2 l o g 1 − e k e k \alpha_k = \frac{1}{2}log\frac{1-e_k}{e_k} αk=21logek1ek
    - 更新样本集的权重分布 w k + 1 , i = w k i Z k e x p ( − α k y i G k ( x i ) )      i = 1 , 2 , . . . m w_{k+1,i} = \frac{w_{ki}}{Z_k}exp(-\alpha_ky_iG_k(x_i)) \;\; i =1,2,...m wk+1,i=Zkwkiexp(αkyiGk(xi))i=1,2,...m Z k = ∑ i = 1 m w k i e x p ( − α k y i G k ( x i ) ) Z_k = \sum\limits_{i=1}^{m}w_{ki}exp(-\alpha_ky_iG_k(x_i)) Zk=i=1mwkiexp(αkyiGk(xi))
  3. 构建最终分类器: f ( x ) = s i g n ( ∑ k = 1 K α k G k ( x ) ) f(x) = sign(\sum\limits_{k=1}^{K}\alpha_kG_k(x)) f(x)=sign(k=1KαkGk(x))

多元分类

对于Adaboost多元分类算法,其实原理和二元分类类似,最主要区别在弱分类器的系数上。比如Adaboost SAMME算法,它的弱分类器的系数 α k = 1 2 l o g 1 − e k e k + l o g ( R − 1 ) \alpha_k = \frac{1}{2}log\frac{1-e_k}{e_k} + log(R-1) αk=21logek1ek+log(R1)其中R为类别数。

Adaboost回归问题算法流程

输入为样本集 T = { ( x , y 1 ) , ( x 2 , y 2 ) , . . . ( x m , y m ) } T=\{(x_,y_1),(x_2,y_2), ...(x_m,y_m)\} T={(x,y1),(x2,y2),...(xm,ym)},弱学习器迭代次数K。
输出为最终的强学习器𝑓(𝑥)

  1. 初始化样本集权重为 D ( 1 ) = ( w 11 , w 12 , . . . w 1 m ) ;      w 1 i = 1 m ;      i = 1 , 2... m D(1) = (w_{11}, w_{12}, ...w_{1m}) ;\;\; w_{1i}=\frac{1}{m};\;\; i =1,2...m D(1)=(w11,w12,...w1m);w1i=m1;i=1,2...m

  2. 对于k = 1, 2,…,K:
    - 使用具有权重 D k D_k Dk的样本集来训练数据,得到弱学习器 G k ( x ) G_k(x) Gk(x)
    - 计算 G k ( x ) G_k(x) Gk(x)在训练集上的最大误差 E k = m a x ∣ y i − G k ( x i ) ∣    i = 1 , 2... m E_k= max|y_i - G_k(x_i)|\;i=1,2...m Ek=maxyiGk(xi)i=1,2...m
    - 计算每个样本的相对误差:
               \;\;\;\;\; 如果是线性误差,则 e k i = ∣ y i − G k ( x i ) ∣ E k e_{ki}= \frac{|y_i - G_k(x_i)|}{E_k} eki=EkyiGk(xi)
               \;\;\;\;\; 如果是平方误差,则 e k i = ( y i − G k ( x i ) ) 2 E k 2 e_{ki}= \frac{(y_i - G_k(x_i))^2}{E_k^2} eki=Ek2(yiGk(xi))2
               \;\;\;\;\; 如果是指数误差,则 e k i = 1 − e x p ( − ∣ y i − G k ( x i ) ∣ E k ) e_{ki}= 1 - exp(\frac{-|y_i - G_k(x_i)|}{E_k}) eki=1expEkyiGk(xi)
    - 计算回归误差率 e k = ∑ i = 1 m w k i e k i e_k = \sum\limits_{i=1}^{m}w_{ki}e_{ki} ek=i=1mwkieki
    - 计算弱学习器权重系数𝛼 α k = e k 1 − e k \alpha_k =\frac{e_k}{1-e_k} αk=1ekek
    - 更新样本集的权重分布 w k + 1 , i = w k i Z k α k 1 − e k i w_{k+1,i} = \frac{w_{ki}}{Z_k}\alpha_k^{1-e_{ki}} wk+1,i=Zkwkiαk1eki Z k = ∑ i = 1 m w k i α k 1 − e k i Z_k = \sum\limits_{i=1}^{m}w_{ki}\alpha_k^{1-e_{ki}} Zk=i=1mwkiαk1eki

  3. 最终的强回归器为 f ( x ) = G k ∗ ( x ) f(x) =G_{k^*}(x) f(x)=Gk(x)
    k*即 l n 1 α k , k = 1 , 2 , . . . . K ln\frac{1}{\alpha_k}, k=1,2,....K lnαk1,k=1,2,....K中位数所对应的分类器k。

Adaboost算法的正则化

  • 为了防止Adaboost过拟合,通常也会加入正则化项𝜈,通常称为步长(learning rate)。
  • 弱学习器的迭代 f k ( x ) = f k − 1 ( x ) + α k G k ( x ) f_{k}(x) = f_{k-1}(x) + \alpha_kG_k(x) fk(x)=fk1(x)+αkGk(x)加入正则化 f k ( x ) = f k − 1 ( x ) + v α k G k ( x ) f_{k}(x) = f_{k-1}(x) + v\alpha_kG_k(x) fk(x)=fk1(x)+vαkGk(x)
  • 𝜈 的取值范围为0<𝜈≤1。对于同样的训练集学习效果,较小的𝜈意味着需要更多的弱学习器的迭代次数。通常用步长和迭代最大次数决定算法的拟合效果。

Adaboost小结

  • 对于决策树,Adaboost分类用了CART分类树,而Adaboost回归用了CART回归树。

优点

  1. Adaboost作为分类器时,分类精度高。
  2. 使用各种回归分类模型来构建弱学习器,使用灵活。
  3. 二元分类时,构造简单,结果可理解。
  4. 不容易发生过拟合

缺点

  1. 对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值