决策树之AdaBoost

125 阅读4分钟

本文从互联网搬运,只用于本人学习记录。

决策树之AdaBoost

AdaBoost(Adaptive Boosting,自适应增强),其自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。

1. 思想

Adaboost 迭代算法有三步:

  1. 初始化训练样本的权值分布,每个样本具有相同权重
  2. 训练弱分类器,如果样本分类正确,则在构造下一个训练集中,它的权值就会被降低;反之提高。用更新过的样本集去训练下一个分类器;
  3. 将所有弱分类组合成强分类器,各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,降低分类误差率大的弱分类器的权重

2. 细节

2.1. 损失函数

Adaboost 模型是加法模型学习算法为前向分步学习算法损失函数为指数函数的分类问题。

加法模型:最终的强分类器是由若干个弱分类器加权平均得到的。

前向分布学习算法:算法是通过一轮轮的弱学习器学习,利用前一个弱学习器的结果来更新后一个弱学习器的训练集权重。第 k 轮的强学习器为:
F k ( x ) = ∑ i = 1 k α i f i ( x ) = F k − 1 ( x ) + α k f k ( x ) F_k(x) = \sum^k_{i = 1}\alpha_if_i(x) = F_{k - 1}(x) + \alpha_kf_k(x) Fk​(x)=i=1∑k​αi​fi​(x)=Fk−1​(x)+αk​fk​(x)

定义损失函数为 n n n个样本的指数损失函数
L ( y , F ) = ∑ i = 1 n e x p ( − y i F k ( x i ) ) L(y, F) = \sum^n_{i = 1}exp(-y_iF_k(x_i)) L(y,F)=i=1∑n​exp(−yi​Fk​(xi​))

利用前向分部学习算法的关系可以得到:
L ( y , F ) = ∑ i = 1 m e x p [ ( − y i ) ( F k − 1 ( x i ) + α k f k ( x i ) ) ] = ∑ i = 1 m e x p [ − y i F k − 1 ( x i ) − y i α k f k ( x i ) ] = ∑ i = 1 m e x p [ − y i F k − 1 ( x i ) ] e x p [ − y i α k f k ( x i ) ] \begin{aligned} L(y, F) &= \sum^m_{i = 1}exp[(-y_i)(F_{k - 1}(x_i) + \alpha_kf_k(x_i))] \\ &= \sum^m_{i = 1}exp[-y_iF_{k - 1}(x_i) - y_i\alpha_kf_k(x_i)] \\ &= \sum^m_{i = 1}exp[-y_iF_{k - 1}(x_i)]exp[-y_i\alpha_kf_k(x_i)] \end{aligned} L(y,F)​=i=1∑m​exp[(−yi​)(Fk−1​(xi​)+αk​fk​(xi​))]=i=1∑m​exp[−yi​Fk−1​(xi​)−yi​αk​fk​(xi​)]=i=1∑m​exp[−yi​Fk−1​(xi​)]exp[−yi​αk​fk​(xi​)]​
因为 F k − 1 ( x ) F_{k - 1}(x) Fk−1​(x)已知,所以令 ω k , i = e x p ( − y i F k − 1 ( x i ) ) \omega_{k, i} = exp(-y_iF_{k - 1}(x_i)) ωk,i​=exp(−yi​Fk−1​(xi​)),随着每一轮迭代而将这个式子带入损失函数,损失函数转化为:
L ( y , F ( x ) ) = ∑ i = 1 m ω k , i e x p [ − y i α k f k ( x i ) ] L(y, F(x)) = \sum^m_{i = 1}\omega_{k, i}exp[-y_i\alpha_kf_k(x_i)] L(y,F(x))=i=1∑m​ωk,i​exp[−yi​αk​fk​(xi​)]
求 f k ( x ) f_k(x) fk​(x),可以得到:
f k ( x ) = arg min ⁡ ∑ i = 1 m ω k , i I ( y i ≠ f k ( x i ) ) f_k(x) = \argmin \sum^m_{i = 1}\omega_{k, i}I(y_i \neq f_k(x_i)) fk​(x)=argmini=1∑m​ωk,i​I(yi​​=fk​(xi​))
将 f k ( x ) f_k(x) fk​(x)带入损失函数,并对 α \alpha α求导,使其等于0,则就得到了:
α k = 1 2 log ⁡ 1 − e k e k \alpha_k = \frac{1}{2}\log{\frac{1 - e_k}{e_k}} αk​=21​logek​1−ek​​
其中, e k e_k ek​是前面的分类误差率。
e k = ∑ i = 1 m ω k i ′ I ( y i ≠ f k ( x i ) ) ∑ i = 1 m ω k i ′ = ∑ i = 1 m ω k i I ( y i ≠ f k ( x i ) ) e_k = \frac{\sum^m_{i = 1}\omega'_{ki}I(y_i \neq f_k(x_i))}{\sum^m_{i = 1}\omega'_{ki}} = \sum^m_{i = 1}\omega_{ki}I(y_i \neq f_k(x_i)) ek​=∑i=1m​ωki′​∑i=1m​ωki′​I(yi​​=fk​(xi​))​=i=1∑m​ωki​I(yi​​=fk​(xi​))
样本的权重更新,利用 F k ( x ) = F k − 1 ( x ) + α k f k ( x ) F_k(x) = F_{k - 1}(x) + \alpha_kf_k(x) Fk​(x)=Fk−1​(x)+αk​fk​(x)和 ω k + 1 , i = ω k , i e x p [ − y i α k f k ( x , i ) ] \omega_{k + 1, i} = \omega{k, i}exp[-y_i\alpha_kf_k(x, i)] ωk+1,i​=ωk,iexp[−yi​αk​fk​(x,i)],即可得到:
ω k + 1 , i = ω k i e x p [ − y i α k f k ( x i ) ] \omega_{k + 1, i} = \omega_{ki}exp[-y_i\alpha_kf_k(x_i)] ωk+1,i​=ωki​exp[−yi​αk​fk​(xi​)]

2.2. 正则化

防止Adaboost过拟合,会加入正则化项 μ \mu μ,通常称为步长
F k ( x ) = F k − 1 ( x ) + μ α k f k ( x ) , 0 < μ ≤ 1 F_k(x) = F_{k - 1}(x) + \mu\alpha_kf_k(x), 0 < \mu \leq 1 Fk​(x)=Fk−1​(x)+μαk​fk​(x),0<μ≤1

3. 优缺点

优点:

  1. 分类精度高;
  2. 可以用各种回归分类模型来构建弱学习器,非常灵活;
  3. 不容易发生过拟合。

缺点:

  1. 对异常点敏感,异常点会获得较高权重。