在集成学习方法之Bagging,Boosting,Stacking篇章中,我们谈论boosting框架的原理,在boosting系列算法中,AdaBoost是著名的算法之一。AdaBoost是英文"Adaptive Boosting"(自适应增强)的缩写,由Yoav Freund和Robert Schapire在1995年提出。
今天我们就来探讨下AdaBoost分类算法的原理,本篇我们先介绍AdaBoost算法;然后通过误差分析探讨AdaBoost为什么能提升模型的学习精度;并且从前向分步加法模型角度解释AdaBoost;最后对AdaBoost的算法优缺点进行一个总结。
1)从boosting到AdaBoost算法
集成原理中,我们提到的boosting框架的思想是选择同质的基分类器,让基分类器之间按照顺序进行训练,并让每个基分类器都尝试去修正前面的分类。既然这样,怎样才能让同质的基分类器能够修正前面的分类?或者说怎样才能让同质的基分类器之间保持“互助”呢?
AdaBoost的做法是,让前一个基分类器 f t − 1 ( x ) f_{t-1}(x) ft−1(x)在当前基分类器 f t ( x ) f_t(x) ft(x)的训练集上的效果很差(和我们随机瞎猜一样),这样 f t ( x ) f_t(x) ft(x)就能修正 f t − 1 ( x ) f_{t-1}(x) ft−1(x)的分类误差, f t ( x ) f_t(x) ft(x)和 f t − 1 ( x ) f_{t-1}(x) ft−1(x)之间也就产生了“互助”。
AdaBoost的具体做法是,通过提高被前一轮基分类器 f t − 1 ( x ) f_{t-1}(x) ft−1(x)分类错误的样本的权值,降低被正确分类样本的权值,使得上一个基分类器 f t − 1 ( x ) f_{t-1}(x) ft−1(x)在更新权值后的训练集上的错误率 ϵ t − 1 \epsilon_{t-1} ϵt−1增大到0.5。(再在更新权值后的训练集上训练基分类器 f t ( x ) f_t(x) ft(x),那 f t ( x ) f_t(x) ft(x)必能和 f t − 1 ( x ) f_{t-1}(x) ft−1(x)产生互助。)
2)AdaBoost算法
下面我们在二分类问题上介绍AdaBoost算法。假如给定训练数据集 T = { ( x i , y i ) } i = 1 n T=\left\{ (x^i,y^i) \right\}^n_{i=1} T={
(xi,yi)}i=1n, x i ∈ R d x^i\in R^d xi∈Rd, y i ∈ { − 1 , 1 } y^i\in\left\{ -1,1\right\} yi∈{
−1,1}
样本权值为 w i n w_i^n win,误差率 ϵ i \epsilon_i ϵi。在训练数据集 T T T上训练第一个基分类器 f 1 ( x ) f_1(x) f1(x),其错误率为 ϵ 1 , ϵ 1 < 0.5 \epsilon_1,\epsilon_1 < 0.5 ϵ1,ϵ1<0.5(起码比瞎猜要好一些)
ϵ 1 = ∑ n w 1 n δ ( ( f 1 ( x n ) ≠ y ^ n ) Z 1 Z 1 = ∑ n w 1 n \epsilon_1=\frac{\sum_nw_1^n\delta((f_1(x^n)\neq {\hat y}^n)}{Z_1} \qquad Z_1 = \sum_nw_1^n ϵ1=Z1∑nw1nδ((f1(xn)=y^n)Z1=n∑w1n
更新样本的权值(权值为 w 2 n w_2^n w2n)后的训练集为 T ′ {T}' T′,使得 f 1 ( x ) f_1(x) f1(x)在 T ′ {T}' T′分类效果等同于随机瞎猜( ϵ = 0.5 \epsilon=0.5 ϵ=0.5)。用数学语言表示即为
∑ n w 2 n δ ( ( f 1 ( x n ) ≠ y ^ n ) Z 2 = 0.5 Z 2 = ∑ n w 2 n \frac{\sum_nw_2^n\delta((f_1(x^n)\neq {\hat y}^n)}{Z_2}=0.5 \qquad Z_2 = \sum_nw_2^n Z2∑nw2nδ((f1(xn)=y^n)=0.5Z2=n∑w2n
那么样本权重如何更新呢?AdaBoost具体做法是,减小 f 1 ( x ) f_1(x) f1(x)分类正确的样本的权值,权值除以一个常数 d d d,即 w 1 n d 1 \frac{w_1^n}{d_1} d1w1n;增大 f 1 ( x ) f_1(x) f1(x)分类错误的样本的权值,权值乘以一个常数 d d d,即 w 1 n d 1 w_1^nd_1 w1nd1。用数学语言表示即为
{ w 2 n = w 1 n d 1 i f f 1 ( x n ) ≠ y ^ n ) w 2 n = w 1 n d 1 i f f 1 ( x n ) = y ^ n ) \begin{cases} w_2^n = w_1^nd_1 \qquad if \ f_1(x^n)\neq {\hat y}^n)\\ w_2^n = \frac{w_1^n}{d_1} \qquad if \ f_1(x^n)= {\hat y}^n)\\ \end{cases} {
w2n=w1nd1if f1(xn)=y^n)w2n=d1w1nif f1(xn)=y^n)
下面我们再回到下式中来,
∑ n w 2 n δ ( ( f 1 ( x n ) ≠ y ^ n ) Z 2 = 0.5 \frac{\sum_nw_2^n\delta((f_1(x^n)\neq {\hat y}^n)}{Z_2}=0.5 Z2∑nw2nδ((f1(xn)=y^n)=0.5
其中, Z 2 = ∑ f 1 ( x n ) ≠ y ^ n w 1 n d 1 + ∑ f 1 ( x n ) = y ^ n w 1 n d 1 Z_2=\sum_{f_1(x^n)\neq {\hat y}^n} w_1^n d_1+\sum_{f_1(x^n)= {\hat y}^n} \frac{w_1^n}{d_1} Z2=∑f1(xn)=y^nw1nd1+∑f1(xn)=y^nd1w1n;当 f 1 ( x n ) ≠ y ^ n f_1(x^n)\neq {\hat y}^n f1(xn)=y^n时, w 2 n = w 1 n d 1 w_2^n = w_1^nd_1 w2n=w1nd1。
将上面两式带入得:
∑ f 1 ( x n ) ≠ y ^ n w 1 n d 1 ∑ f 1 ( x n ) ≠ y ^ n w 1 n d 1 + ∑ f 1 ( x n ) = y ^ n w 1 n d 1 = 0.5 \frac{\sum_{f_1(x^n)\neq {\hat y}^n} w_1^n d_1}{\sum_{f_1(x^n)\neq {\hat y}^n} w_1^n d_1+\sum_{f_1(x^n)= {\hat y}^n} \frac{w_1^n}{d_1}}=0.5 ∑f1(xn)=y^nw1nd1+∑f1(xn)=y^nd1w1n∑f1(xn)=y^nw1nd1=0.5
∑ f 1 ( x n ) = y ^ n w 1 n d 1 = ∑ f 1 ( x n ) ≠ y ^ n w 1 n d 1 \sum_{f_1(x^n)= {\hat y}^n} \frac{w_1^n}{d_1}=\sum_{f_1(x^n)\neq {\hat y}^n} w_1^n d_1 f1(xn)=y^n∑d1w1n=f1(xn)=y^n∑w1nd1
又因为 ϵ 1 = ∑ f 1 ( x n ) ≠ y ^ n w 1 n Z 1 ⇒ ϵ 1 Z 1 = ∑ f 1 ( x n ) ≠ y ^ n w 1 n \epsilon_1=\frac{\sum_{f_1(x^n)\neq {\hat y}^n} w_1^n}{Z_1}\Rightarrow \epsilon_1Z_1=\sum_{f_1(x^n)\neq {\hat y}^n} w_1^n ϵ1=Z1∑f1(xn)=y^nw1n⇒ϵ1Z1=f1(xn)=y^n∑w1n
1 − ϵ 1 = ∑ f 1 ( x n ) = y ^ n w 1 n Z 1 ⇒ ( 1 − ϵ 1 ) Z 1 = ∑ f 1 ( x n ) = y ^ n w 1 n 1-\epsilon_1=\frac{\sum_{f_1(x^n)= {\hat y}^n} w_1^n}{Z_1}\Rightarrow (1-\epsilon_1)Z_1=\sum_{f_1(x^n)= {\hat y}^n} w_1^n 1−ϵ1=Z1∑f1(xn)=y^nw1n⇒(1−ϵ1)Z1=f1(xn)=y^n∑w1n
因此,
∑ f 1 ( x n ) = y ^ n w 1 n d 1 = ∑ f 1