在boosting系列算法中, Adaboost是最著名的算法之一。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个弱学习器的输出权重为 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} -
第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=1∑mwkiI(Gk(xi)=yi)
-
获得了第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=1∑m1w(k+1)iI(Gk+1(xi)=yi)∗d=i=1∑m2w(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=21logek1−ek
-
假设第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=1∑mwkiexp(−αkyiGk(xi))
如果第i个样本分类错误,则 y i G k ( x i ) ) < 0 y_iG_k(x_i))<0 yiGk(xi))<0,导致样本的权重在第k+1个弱分类器中增大,如果分类正确,则权重在第k+1个弱分类器中减少 -
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=1∑KαkGk(x))
回归
-
对于第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=max∣yi−Gk(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=Ek∣yi−Gk(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(yi−Gk(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=1−exp(Ek−∣yi−Gk(xi)∣) -
第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=1∑mwkieki
-
弱学习器权重系数𝛼 α k = e k 1 − e k \alpha_k =\frac{e_k}{1-e_k} αk=1−ekek
-
第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αk1−eki
规范化因子: 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=1∑mwkiαk1−eki -
最终的强回归器为 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=1∑mexp(−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=1∑mexp[(−yi)(fk−1(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。
输出为最终的强分类器𝑓(𝑥)
- 初始化样本集权重为 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
- 对于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=1∑mwkiI(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=21logek1−ek
- 更新样本集的权重分布 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=1∑mwkiexp(−αkyiGk(xi)) - 构建最终分类器: 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=1∑Kα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=21logek1−ek+log(R−1)其中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。
输出为最终的强学习器𝑓(𝑥)
-
初始化样本集权重为 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
-
对于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=max∣yi−Gk(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=Ek∣yi−Gk(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(yi−Gk(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=1−exp(Ek−∣yi−Gk(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=1∑mwkieki
- 计算弱学习器权重系数𝛼 α k = e k 1 − e k \alpha_k =\frac{e_k}{1-e_k} αk=1−ekek
- 更新样本集的权重分布 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αk1−eki 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=1∑mwkiαk1−eki -
最终的强回归器为 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)=fk−1(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)=fk−1(x)+vαkGk(x)
- 𝜈 的取值范围为0<𝜈≤1。对于同样的训练集学习效果,较小的𝜈意味着需要更多的弱学习器的迭代次数。通常用步长和迭代最大次数决定算法的拟合效果。
Adaboost小结
- 对于决策树,Adaboost分类用了CART分类树,而Adaboost回归用了CART回归树。
优点
- Adaboost作为分类器时,分类精度高。
- 使用各种回归分类模型来构建弱学习器,使用灵活。
- 二元分类时,构造简单,结果可理解。
- 不容易发生过拟合
缺点
- 对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。