boosting系列算法个体学习器之间存在强依赖关系,Adaboost是boosting系列算法中最著名的算法之一。Adaboost既可以用作分类,也可以用作回归。
boosting算法的工作流程是:
(1)从训练集用初始权重训练出一个弱学习器1;
(2)根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视;
(3)基于调整权重后的训练集来训练弱学习器2
如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。
在boosting算法中有几个问题如下:
1)如何计算学习误差率e?
2) 如何得到弱学习器权重系数
α
\alpha
α
3) 如何更新样本权重D
4) 使用何种结合策略
1. Adaboost算法思路
假设训练集样本是 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . ( x m , y m ) T={(x_1,y_1),(x_2,y_2),...(x_m,y_m)} T=(x1,y1),(x2,y2),...(xm,ym)
训练集的在第k个弱学习器的样本权重为 D ( k ) = ( w k 1 , w k 2 , … w k m ) ; w 1 i = 1 m ; i = 1 D(k)=\left(w_{k 1}, w_{k 2}, \ldots w_{k m}\right) ; w_{1 i}=\frac{1}{m} ; i=1 D(k)=(wk1,wk2,…wkm);w1i=m1;i=1
1.1 分类问题
[1].分类器误差率计算
由于多元分类是二元分类的推广,这里假设我们是二元分类问题,输出为{-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\left(G_{k}\left(x_{i}\right) \neq y_{i}\right)=\sum_{i=1}^{m} w_{k i} I\left(G_{k}\left(x_{i}\right) \neq y_{i}\right)
ek=P(Gk(xi)=yi)=i=1∑mwkiI(Gk(xi)=yi)
即: 所有分错样本的样本权重和
[2]. 学习器权重系数计算
对于二元分类问题,第k个弱分类器
G
k
(
x
)
G_k(x)
Gk(x)的权重系数为
α
k
=
1
2
log
1
−
e
k
e
k
\alpha_{k}=\frac{1}{2} \log \frac{1-e_{k}}{e_{k}}
αk=21logek1−ek
从上式可以看出,如果分类误差率
e
k
e_k
ek越大,则对应的弱分类器权重系数
α
k
α_k
αk越小。也就是说,误差率小的弱分类器权重系数越大。
[3]. 更新样本权重D
假设第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
exp
(
−
α
k
y
i
G
k
(
x
i
)
)
w_{k+1, i}=\frac{w_{k i}}{Z_{K}} \exp \left(-\alpha_{k} y_{i} G_{k}\left(x_{i}\right)\right)
wk+1,i=ZKwkiexp(−αkyiGk(xi))
这里
Z
k
Z_k
Zk是规范化因子
Z
k
=
∑
i
=
1
m
w
k
i
exp
(
−
α
k
y
i
G
k
(
x
i
)
)
Z_{k}=\sum_{i=1}^{m} w_{k i} \exp \left(-\alpha_{k} y_{i} G_{k}\left(x_{i}\right)\right)
Zk=i=1∑mwkiexp(−αkyiGk(xi))
类似于softmax的计算,但是softmax的输入为:分类器的权重系数与分类器预测值及标签值得乘积取负数
从 w k + 1 , i w_{k+1,i} wk+1,i计算公式可以看出,如果第 i i i个样本分类错误,则 y i G k ( x i ) < 0 y_iG_k(x_i)<0 yiGk(xi)<0,导致样本的权重在第k+1个弱分类器中增大,如果分类正确,则权重在第k+1个弱分类器中减少.
[4]. 集合策略
Adaboost分类采用的是加权表决法,最终的强分类器为
f
(
x
)
=
sign
(
∑
k
=
1
K
α
k
G
k
(
x
)
)
f(x)=\operatorname{sign}\left(\sum_{k=1}^{K} \alpha_{k} G_{k}(x)\right)
f(x)=sign(k=1∑KαkGk(x))
即:用所有分类器得权重乘以分类器得预测值得和来表决
1.2 回归问题
由于Adaboost的回归问题有很多变种,这里我们以Adaboost R2算法为准
[1].分类器误差率计算
第k个弱学习器在训练集上的最大误差
E
k
=
max
∣
y
i
−
G
k
(
x
i
)
∣
i
=
1
,
2
…
m
E_{k}=\max \left|y_{i}-G_{k}\left(x_{i}\right)\right| i=1,2 \ldots m
Ek=max∣yi−Gk(xi)∣i=1,2…m
每个样本的相对误差
e
k
i
=
∣
y
i
−
G
k
(
x
i
)
∣
E
k
e_{k i}=\frac{\left|y_{i}-G_{k}\left(x_{i}\right)\right|}{E_{k}}
eki=Ek∣yi−Gk(xi)∣
上面公式是误差损失为线性时的情况, 也可以选用平方误差:
e
k
i
=
(
y
i
−
G
k
(
x
i
)
)
2
E
k
2
e_{k i}=\frac{\left(y_{i}-G_{k}\left(x_{i}\right)\right)^{2}}{E_{k}^{2}}
eki=Ek2(yi−Gk(xi))2以及指数误差:
e
k
i
=
1
−
exp
(
−
y
i
+
G
k
(
x
i
)
)
E
k
)
e_{k i}=1-\exp \left(\frac{\left.-y_{i}+G_{k}\left(x_{i}\right)\right)}{E_{k}}\right)
eki=1−exp(Ek−yi+Gk(xi)))
最终得到第k个弱学习器的误差率为:
e
k
=
∑
i
=
1
m
w
k
i
e
k
i
e_{k}=\sum_{i=1}^{m} w_{k i} e_{k i}
ek=i=1∑mwkieki
即所有样本的样本权重与样本相对误差乘积和
[2].弱学习器的权重系数计算
α
k
=
e
k
1
−
e
k
\alpha_{k}=\frac{e_{k}}{1-e_{k}}
αk=1−ekek
可以发现若学习器误差率越大,学习器权重系数越大(此处没错,注意下面解释)
[3]. 更新样本权重D
第k+1个弱学习器的样本集权重系数为
w
k
+
1
,
i
=
w
k
i
Z
k
α
k
1
−
e
k
i
w_{k+1, i}=\frac{w_{k i}}{Z_{k}} \alpha_{k}^{1-e_{k i}}
wk+1,i=Zkwkiαk1−eki
这里
Z
k
Z_k
Zk是规范化因子
Z
k
=
∑
i
=
1
m
w
k
i
α
k
1
−
e
k
i
Z_{k}=\sum_{i=1}^{m} w_{k i} \alpha_{k}^{1-e_{k i}}
Zk=i=1∑mwkiαk1−eki
注意到没,此处权重系数公式中使用了 1 − e k i 1-e_{ki} 1−eki把符号提到前面,就相当于 α k − 1 \alpha_k^{-1} αk−1即对 α k \alpha_k αk倒过来了,因此在步骤【2】中的【错误】并不是错的
[4].结合策略
和分类问题稍有不同,采用的是对加权的弱学习器取权重中位数对应的弱学习器作为强学习器的方法,最终的强回归器为
f
(
x
)
=
G
k
∗
(
x
)
f(x)=G_{k*}(x)
f(x)=Gk∗(x)
其中, G k ∗ ( x ) G_{k∗}(x) Gk∗(x)是所有 l n 1 α k , k = 1 , 2 , . . . . K ln\frac{1}{α_k},k=1,2,....K lnαk1,k=1,2,....K的中位数值对应序号 k ∗ k^∗ k∗对应的弱学习器。
1.3 小结
从另一个角度讲,Adaboost是模型为加法模型,学习算法为前向分步学习算法,损失函数为指数函数的分类问题
(1)模型为加法模型,因为最终的强分类器是若干个弱分类器加权平均而得到的
(2)前向分步学习算法也好理解,我们的算法是通过一轮轮的弱学习器学习,利用前一个强学习器的结果和当前弱学习器来更新当前的强学习器的模型。也就是说,第k-1轮的强学习器为 f k − 1 ( x ) = ∑ i = 1 k − 1 α i G i ( x ) f_{k-1}(x)=\sum_{i=1}^{k-1} \alpha_{i} G_{i}(x) fk−1(x)=∑i=1k−1αiGi(x);而第k轮的强学习器为 f k ( x ) = ∑ i = 1 k α i G i ( x ) f_{k}(x)=\sum_{i=1}^{k} \alpha_{i} G_{i}(x) fk(x)=∑i=1kαiGi(x),即 f k ( x ) = f k − 1 ( x ) + α k G k ( x ) f_{k}(x)=f_{k-1}(x)+\alpha_{k} G_{k}(x) fk(x)=fk−1(x)+αkGk(x);可见强学习器的确是通过前向分步学习算法一步步而得到的
(3)Adaboost损失函数为指数函数,即定义损失函数为 arg min ⏟ α , G ∑ i = 1 m exp ( − y i f k ( x ) ) \underbrace{\arg \min }_{\alpha, G} \sum_{i=1}^{m} \exp \left(-y_{i} f_{k}(x)\right) α,G argmin∑i=1mexp(−yifk(x))
2. AdaBoost二元分类问题算法流程
(1)初始化样本集权重
D
1
D_1
D1为
1
m
\frac{1}{m}
m1(共m个样本)
(2)使用
D
k
D_k
Dk样本权重的样本集训练学习器
G
k
(
x
)
G_k(x)
Gk(x) (k= 1,2,3…K)
(3)计算分类器
G
k
(
x
)
G_k(x)
Gk(x)的分类误差率
(4)计算弱分类器的权重系数
(5)更新样本集权重系数
D
k
+
1
D_{k+1}
Dk+1
重复(2)到(5)直到 k = K
(6)构造最终分类器
f
(
x
)
=
sign
(
∑
k
=
1
K
α
k
G
k
(
x
)
)
f(x)=\operatorname{sign}\left(\sum_{k=1}^{K} \alpha_{k} G_{k}(x)\right)
f(x)=sign(∑k=1KαkGk(x))
对于Adaboost多元分类算法,其实原理和二元分类类似,最主要区别在弱分类器的系数上。比如Adaboost SAMME算法,它的弱分类器的系数
α
k
=
1
2
log
1
−
e
k
e
k
+
log
(
R
−
1
)
\alpha_{k}=\frac{1}{2} \log \frac{1-e_{k}}{e_{k}}+\log (R-1)
αk=21logek1−ek+log(R−1)
其中R为类别数。从上式可以看出,如果是二元分类,R=2,则上式和我们的二元分类算法中的弱分类器的系数一致。
3. Adaboost算法的正则化
为了防止Adaboost过拟合,我们通常也会加入正则化项,这个正则化项我们通常称为步长(learning rate)。定义为
ν
ν
ν,对于前面的弱学习器的迭代
f
k
(
x
)
=
f
k
−
1
(
x
)
+
α
k
G
k
(
x
)
f_{k}(x)=f_{k-1}(x)+\alpha_{k} G_{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_{k} G_{k}(x)
fk(x)=fk−1(x)+vαkGk(x)
ν ν ν的取值范围为(0,1]。对于同样的训练集学习效果,较小的 ν ν ν意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。
4. 总结
对于弱学习器的类型,理论上任何学习器都可以用于Adaboost.但一般来说,使用最广泛的Adaboost弱学习器是决策树和神经网络。对于决策树,Adaboost分类用了CART分类树,而Adaboost回归用了CART回归树
Adaboost的主要优点有:
1)Adaboost作为分类器时,分类精度很高
2)在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。
3)作为简单的二元分类器时,构造简单,结果可理解。
4)不容易发生过拟合
Adaboost的主要缺点有:
1)对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性