Adaboost算法原理与实例

1、Adaboost算法简介

集成学习包括bagging、boosting、stacking三种方法。Adaboost作为boosting方法的一种,由Yoav Freund和RobertSchapire于1995年提出。

Adaboost的英文含义为Adaptive boost,意为自适应增强。Adaboost算法包括分类算法与回归算法,这里讲解分类算法。

这一算法的基本思路是,在一组弱分类器的基础上,通过不断调整弱分类器权重与样本权重,构建强分类器。这一算法需要事先给定一组弱分类器。在这一过程中,会增加分类误差大的样本的权重,减少分类误差小的样本的权重;并通过样本误差进一步确定弱分类器的权重,使得误差越小其权重越大。

2、Adaboost算法过程

2.1 输入输出

1)输入

训练样本集:D=\left \{ (x_{1},y_{1}),(x_{2},y_{2}),...,(x_{N},y_{N}) \right \},其中,y_{i}\in \left \{ 1,-1 \right \},i=1,2,...,N

J个弱分类器:h_{1},h_{2},...,h_{J}

2)输出

最终分类器H(x)

2.2 算法过程

2.2.1 初始化样本权重

设初始的样本权重为W_{0}=(w_{01},w_{02},...,w_{0N})

给训练的每个样本赋予相等的权重:\frac{1}{N},即以上权重W_{0}=(\frac{1}{N},\frac{1}{N},...,\frac{1}{N})

2.2.2 进行迭代

对于第t=1,2,...,T轮迭代:

1)确定本轮基本分类器

根据最新的样本权重W_{t}=\left ( w_{t1},w_{t2},...,w_{tN} \right ),计算每一个弱分类的误差。

每个弱分类器的误差为:

e_{tj}=P(h_{j}(x_{i})\neq y_{i}|i\in \left \{ 1,2,..,N \right \})=\sum_{i=0}^{N}w_{ti}I(h_{j}(x_{i})\neq y_{i})

j=1,2,...,J

其中,误差最小的弱分类器记为H_{t},确定为本轮基本分类器,其误差为e_{t}

2)计算本轮基本分类器的权重

上述基本分类器H_{t}的权重:

\alpha _{t}=\frac{1}{2}ln\frac{1-e_{t}}{e_{t}}

从上述公式可以看出:当e_{t}<0.5时,\alpha _{t}>0;当e_{t}=0.5时,\alpha _{t}=0;当e_{t}>0.5时,\alpha _{t}<0。并且,随着e_{t}的增大,\alpha _{t}会逐渐减小。

3)确定本轮的分类函数和强分类器

t=1时,分类函数f_{1}(x)=\alpha _{1}H_{1}(x),本轮强分类器sign(f_{1}(x))

t> 1时,分类函数f_{t}(x)=f_{t-1}(x)+\alpha _{t}H_{t}(x)=\sum_{i=1}^{t}\alpha _{i}H_{i}(x),本轮强分类器sign(f_{t}(x))

4)更新样本的权重

在前述弱分类器的分类下,样本的预测值与实际值可能不一致。在Adaboost算法中,会增加预测错误的样本的权重。为此,构造了如下的样本新权重:

w_{t+1,i}=\frac{w_{t,i}*exp\left \{ -\alpha_{t}y_{i}H_{t}(x_{i}) \right \}}{Z_{t}}i=1,2,...,N

其中Z_{t}是规范化因子,构建Z_{t}=\sum_{i=1}^{N}w_{t,i}exp\left \{ -\alpha _{t}y_{i}H_{t}(x_{i}) \right \}

可以看出Z_{t}w_{t+1,i}的分子部分的求和,如此\sum_{i=1}^{N}w_{t+1,i}=1,且可使得w_{t+1,i}的取值介于0到1之间。

规范化因子的表达式可以进行简化,Z_{t}=2\sqrt{e_{t}(1-{e_{t}})}

a.当样本分类正确时,y_{i}H_{t}(x_{i})=1,新的样本权重为

w_{t+1,i}=\frac{w_{t,i}*exp\left \{ -\alpha_{t}y_{i}H_{t}(x_{i}) \right \}}{Z_{t}}=\frac{w_{t,i}*exp\left \{ -\alpha _{t} \right \}}{Z_{t}}=\frac{w_{t,i}*exp\left \{ -\frac{1}{2}ln\frac{1-e_{t}}{e_{t}} \right \}}{Z_{t}}=\frac{w_{t,i}*exp\left \{ \ln(\frac{e_{t}}{1-e_{t}})^{\frac{1}{2}} \right \}}{Z_{t}}=\frac{w_{t,i}*\sqrt{\frac{e_{t}}{1-e_{t}}}}{Z_{t}}=\frac{w_{t,i}*\sqrt{\frac{e_{t}}{1-e_{t}}}}{2\sqrt{e_{t}(1-e_{t})}}=\frac{w_{t,i}}{2(1-e_{t})}

b.当样本分类错误时,y_{i}H_{t}(x_{i})=-1,新的样本权重为

w_{t+1,i}=\frac{w_{t,i}*exp\left \{ -\alpha_{t}y_{i}H_{t}(x_{i}) \right \}}{Z_{t}}=\frac{w_{t,i}*exp\left \{ \alpha _{t} \right \}}{Z_{t}}=\frac{w_{t,i}*exp\left \{ \frac{1}{2}ln\frac{1-e_{t}}{e_{t}} \right \}}{Z_{t}}=\frac{w_{t,i}*exp\left \{ \ln(\frac{1-e_{t}}{e_{t}})^{\frac{1}{2}} \right \}}{Z_{t}}=\frac{w_{t,i}*\sqrt{\frac{1-e_{t}}{e_{t}}}}{Z_{t}}=\frac{w_{t,i}*\sqrt{\frac{1-e_{t}}{e_{t}}}}{2\sqrt{e_{t}(1-e_{t})}}=\frac{w_{t,i}}{2(1-e_{t})}=\frac{w_{t,i}}{2{e_{t}}}

Tips:Z_{t}的简化过程

Z_{t}=\sum_{i=1}^{N}w_{t,i}exp\left \{ -\alpha _{t}y_{i}H_{t}(x_{i}) \right \}=

\sum_{i:y_{i}= H_{t}(x_{i})}^{}w_{t,i}exp\left \{ -\alpha _{t}y_{i}H_{t}(x_{i}) \right \}+\sum_{i:y_{i}\neq H_{t}(x_{i})}^{}w_{t,i}exp\left \{ -\alpha _{t}y_{i}H_{t}(x_{i}) \right \} =\sum_{i:y_{i}= H_{t}(x_{i})}^{}w_{t,i}exp\left \{ -\alpha _{t} \right \}+\sum_{i:y_{i}\neq H_{t}(x_{i})}^{}w_{t,i}exp\left \{ \alpha _{t} \right \}

=\sum_{i:y_{i}= H_{t}(x_{i})}^{}w_{t,i}exp\left \{ -\frac{1}{2}ln\frac{1-{e_{t}}}{e_{t}} \right \}+\sum_{i:y_{i}\neq H_{t}(x_{i})}^{}w_{t,i}exp\left \{ \frac{1}{2}ln\frac{1-{e_{t}}}{e_{t}} \right \}=\sum_{i:y_{i}= H_{t}(x_{i})}^{}w_{t,i}exp\left \{ ln(\frac{​{e_{t}}}{1-e_{t}})^{\frac{1}{2}} \right \}+\sum_{i:y_{i}\neq H_{t}(x_{i})}^{}w_{t,i}exp\left \{ ln(\frac{​{1-e_{t}}}{e_{t}})^{\frac{1}{2}} \right \}

=\sum_{i:y_{i}= H_{t}(x_{i})}^{}w_{t,i}\sqrt{\frac{e_{t}}{1-e_{t}}}+\sum_{i:y_{i}\neq H_{t}(x_{i})}^{}w_{t,i}\sqrt{\frac{1-e_{t}}{e_{t}}}

在计算w_{t+1,i}时,e_{t}已知,与i无关,并且由前述构造可知\sum_{i:y_{i}= H_{t}(x_{i})}^{}w_{t,i}+\sum_{i:y_{i}\neq H_{t}(x_{i})}^{}w_{t,i}=1

于是,上式等于

\sum_{i:y_{i}= H_{t}(x_{i})}^{}w_{t,i}\sqrt{\frac{e_{t}}{1-e_{t}}}+\sum_{i:y_{i}\neq H_{t}(x_{i})}^{}w_{t,i}\sqrt{\frac{1-e_{t}}{e_{t}}}

=(1-\sum_{i:y_{i}\neq H_{t}(x_{i})}^{}w_{t,i})\sqrt{\frac{e_{t}}{1-e_{t}}}+\sum_{i:y_{i}\neq H_{t}(x_{i})}^{}w_{t,i}\sqrt{\frac{1-e_{t}}{e_{t}}}

=(1-e_{t})\sqrt{\frac{e_{t}}{1-e_{t}}}+e_{t}\sqrt{\frac{1-e_{t}}{e_{t}}}

=2\sqrt{e_{t}(1-e_{t})}

2.2.3 得到最终分类器

当在第T轮迭代时:误差e_{t}=0时,或满足停止条件(如迭代次数、分类器在训练集或测试集上的性能等)时,迭代停止。

得到最终分类函数f_{T}(x)=\sum_{t=1}^{T}\alpha _{t}H_{t}(x)

最终强分类器H(x) =sign(f_{T}(x))=sign(\sum_{t=1}^{T}\alpha _{t}H_{t}(x))

3、Adaboost算法实例

给定如下数据集:

序号12345678910
x(1,4)(2,5)(3,9)(4,1)(5,8)(6,3)(7,10)(8,7)(9,7)(10,9)
y-1-1-1111-11-11

其中x=(x_{1},x_{2})y为分类特征。

该数据的三个弱分类器:

h_{1}(x)=\left\{\begin{matrix} -1,x_{1} \leqslant 3.5& \\ 1,x_{1}>3.5 & \end{matrix}\right.h_{2}(x)=\left\{\begin{matrix} -1,x_{1} \leqslant 7.5& \\ 1,x_{1}>7.5 & \end{matrix}\right.h_{3}(x)=\left\{\begin{matrix} 1,x_{2} \leqslant 8.5& \\ -1,x_{2}>8.5 & \end{matrix}\right.

3.1 初始化样本权重

初始化样本权重W_{0}=(\frac{1}{10},\frac{1}{10},...,\frac{1}{10})

序号12345678910
x(1,4)(2,5)(3,9)(4,1)(5,8)(6,3)(7,10)(8,7)(9,7)(10,9)
y-1-1-1111-11-11
W_{0}1/101/101/101/101/101/101/101/101/101/10

3.2 进行迭代

3.2.1 第1轮迭代

1)确定本轮基本分类器

根据最新的样本权重W_{0}计算每个弱分类器的误差。

第1个分类器h_{1}(x),第7、9个样本分类错误。

其误差e_{1,1}=\sum_{i=0}^{N}w_{0,i}I(h_{1}(x_{i})\neq y_{i})=\frac{1}{10}+\frac{1}{10}=0.2

第2个分类器h_{2}(x),第4、5、6、9个样本分类错误。

其误差e_{1,2}=\sum_{i=0}^{N}w_{0,i}I(h_{2}(x_{i})\neq y_{i})=\frac{1}{10}+\frac{1}{10}+\frac{1}{10}+\frac{1}{10}=0.4

第3个分类器h_{3}(x),第1、2、9、10个样本分类错误。

其误差e_{1,3}=\sum_{i=0}^{N}w_{0,i}I(h_{3}(x_{i})\neq y_{i})=\frac{1}{10}+\frac{1}{10}+\frac{1}{10}+\frac{1}{10}=0.4

第1个弱分类器h_{1}(x)误差最小,记为基本分类器H_{1}(x),即H_{1}(x)=h_{1}(x)

其误差记为e_{1}e_{1}=e_{t1}=0.2

2)计算本轮基本分类器的权重

基本分类器H_{1}(x)的权重:

\alpha _{1}=\frac{1}{2}ln\frac{1-e_{1}}{e_{1}}=ln\frac{1-0.2}{0.2}=0.6931

3)确定本轮的分类函数和强分类器

本轮分类函数f_{1}(x)=\alpha _{1}H_{1}(x)=0.6931h_{1}(x),本轮强分类器sign(f_{1}(x))

本轮强分类器下,第7、9个样本分类错误(或不满足停止条件),继续迭代。

4)更新样本的权重

在前述基本分类H_{1}(x)器下,第7、9个样本分类错误。

a.当样本分类正确时,新的样本权重w_{1,i}=\frac{w_{0i}}{2(1-e_{1})}=\frac{0.1}{2(1-0.2)}=\frac{1}{16}

b.当样本分类错误时,新的样本权重w_{1,i}=\frac{w_{0,i}}{2e_{1}}=\frac{0.1}{2*0.2}=\frac{1}{4}

即新的样本权重为

W_{1}=(\frac{1}{16},\frac{1}{16},\frac{1}{16},\frac{1}{16},\frac{1}{16},\frac{1}{16},\frac{1}{4},\frac{1}{16},\frac{1}{4},\frac{1}{16})

3.2.2 第2轮迭代

1)确定本轮基本分类器

根据最新的样本权重W_{1}计算每个弱分类器的误差。

第1个分类器h_{1}(x),第7、9个样本分类错误。

其误差e_{2,1}=\sum_{i=0}^{N}w_{1,i}I(h_{1}(x_{i})\neq y_{i})=\frac{1}{4}+\frac{1}{4}=0.5

第2个分类器h_{2}(x),第4、5、6、9个样本分类错误。

其误差e_{2,2}=\sum_{i=0}^{N}w_{1,i}I(h_{2}(x_{i})\neq y_{i})=\frac{1}{16}+\frac{1}{16}+\frac{1}{16}+\frac{1}{4}=\frac{7}{16}

第3个分类器h_{3}(x),第1、2、9、10个样本分类错误。

其误差e_{2,3}=\sum_{i=0}^{N}w_{1,i}I(h_{3}(x_{i})\neq y_{i})=\frac{1}{16}+\frac{1}{16}+\frac{1}{4}+\frac{1}{16}=\frac{7}{16}

第2、3个弱分类器误差最小,不妨选择第2个分类器h_{2}(x),记为基本分类器H_{2}(x),即H_{2}(x)=h_{2}(x)

其误差记为e_{2}e_{2}=e_{2,1}=\frac{7}{16}

2)计算本轮基本分类器的权重

基本分类器H_{2}(x)的权重:

\alpha _{2}=\frac{1}{2}ln\frac{1-e_{2}}{e_{2}}=ln\frac{1-\frac{7}{16}}{\frac{7}{16}}=0.2513

3)确定本轮的分类函数和强分类器

本轮分类函数f_{2}(x)=f_{1}(x)+\alpha _{2}H_{2}(x)=0.6931h_{1}(x)+0.2513h_{2}(x),本轮强分类器sign(f_{2}(x))

本轮强分类器下,第7、9个样本分类错误(或不满足停止条件),继续迭代。

4)更新样本的权重

在前述基本分类H_{2}(x)器下,第4、5、6、9个样本分类错误。

a.当样本分类正确时,新的样本权重w_{2,i}=\frac{w_{1,i}}{2(1-e_{2})}

b.当样本分类错误时,新的样本权重w_{2,i}=\frac{w_{1,i}}{2e_{2}}

即新的样本权重为

W_{2}=(\frac{1}{18},\frac{1}{18},\frac{1}{18},\frac{1}{14},\frac{1}{14},\frac{1}{14},\frac{2}{9},\frac{1}{18},\frac{2}{7},\frac{1}{18})

3.2.3 第3轮迭代

1)确定本轮基本分类器

根据最新的样本权重W_{2}计算每个弱分类器的误差。

第1个分类器h_{1}(x),第7、9个样本分类错误。

其误差e_{3,1}=\sum_{i=0}^{N}w_{2,i}I(h_{1}(x_{i})\neq y_{i})=\frac{2}{9}+\frac{2}{7}=\frac{32}{63}

第2个分类器h_{2}(x),第4、5、6、9个样本分类错误。

其误差e_{3,2}=\sum_{i=0}^{N}w_{2,i}I(h_{2}(x_{i})\neq y_{i})=\frac{1}{14}+\frac{1}{14}+\frac{1}{14}+\frac{2}{7}=0.5

第3个分类器h_{3}(x),第1、2、9、10个样本分类错误。

其误差e_{3,3}=\sum_{i=0}^{N}w_{2,i}I(h_{3}(x_{i})\neq y_{i})=\frac{1}{18}+\frac{1}{18}+\frac{2}{7}+\frac{1}{18}=\frac{19}{42}

第3个弱分类器误差最小,第3个分类器h_{3}(x),记为基本分类器H_{3}(x),即H_{3}(x)=h_{3}(x)

其误差记为e_{3}e_{3}=e_{3,3}=\frac{19}{42}

2)计算本轮基本分类器的权重

基本分类器H_{3}(x)的权重:

\alpha _{3}=\frac{1}{2}ln\frac{1-e_{3}}{e_{3}}=ln\frac{1-\frac{19}{42}}{\frac{19}{42}}=0.1911

3)确定本轮的分类函数和强分类器

本轮分类函数f_{3}(x)=f_{2}(x)+\alpha _{3}H_{3}(x)=0.6931h_{1}(x)+0.2513h_{2}(x)+0.1911h_{3}(x),本轮强分类器sign(f_{3}(x))

本轮强分类器下,第7、9个样本分类错误(或不满足停止条件),继续迭代。

4)更新样本的权重

在前述基本分类H_{3}(x)器下,第1、2、9、10个样本分类错误。

a.当样本分类正确时,新的样本权重w_{3,i}=\frac{w_{2,i}}{2(1-e_{3})}

b.当样本分类错误时,新的样本权重w_{3,i}=\frac{w_{2,i}}{2e_{3}}

即新的样本权重为

W_{3}=(\frac{7}{114},\frac{7}{114},\frac{7}{138},\frac{3}{46},\frac{3}{46},\frac{3}{46},\frac{14}{69},\frac{7}{138},\frac{6}{19},\frac{7}{114})

3.2.4 第4轮迭代

1)确定本轮基本分类器

根据最新的样本权重W_{3}计算每个弱分类器的误差。

第1个分类器h_{1}(x),第7、9个样本分类错误。

其误差e_{4,1}=\sum_{i=0}^{N}w_{3,i}I(h_{1}(x_{i})\neq y_{i})=\frac{14}{69}+\frac{6}{19}=\frac{680}{1311}=0.5187

第2个分类器h_{2}(x),第4、5、6、9个样本分类错误。

其误差e_{4,2}=\sum_{i=0}^{N}w_{3,i}I(h_{2}(x_{i})\neq y_{i})=\frac{3}{46}+\frac{3}{46}+\frac{3}{46}+\frac{9}{16}=0.7582

第3个分类器h_{3}(x),第1、2、9、10个样本分类错误。

其误差e_{4,3}=\sum_{i=0}^{N}w_{3,i}I(h_{3}(x_{i})\neq y_{i})=\frac{7}{114}+\frac{7}{114}+\frac{6}{19}+\frac{7}{114}=0.5

第3个弱分类器误差最小,第3个分类器h_{3}(x),记为基本分类器H_{4}(x),即H_{4}(x)=h_{3}(x)

其误差记为e_{4}e_{4}=e_{4,3}=0.5

2)计算本轮基本分类器的权重

基本分类器H_{4}(x)的权重:

\alpha _{4}=\frac{1}{2}ln\frac{1-e_{4}}{e_{4}}=ln\frac{1-0.5}{0.5}=0

3)确定本轮的分类函数和强分类器

本轮分类函数f_{4}(x)=f_{3}(x)+\alpha _{4}H_{4}(x)=0.6931h_{1}(x)+0.2513h_{2}(x)+0.1911h_{3}(x),本轮强分类器sign(f_{4}(x))

本轮强分类器下,第7、9个样本分类错误(或不满足停止条件),继续迭代。

4)更新样本的权重

在前述基本分类H_{4}(x)器下,第1、2、9、10个样本分类错误。

a.当样本分类正确时,新的样本权重w_{4,i}=\frac{w_{3,i}}{2(1-e_{4})}

b.当样本分类错误时,新的样本权重w_{4,i}=\frac{w_{3,i}}{2e_{4}}

即新的样本权重为

W_{4}=(\frac{7}{114},\frac{7}{114},\frac{7}{138},\frac{3}{46},\frac{3}{46},\frac{3}{46},\frac{14}{69},\frac{7}{138},\frac{6}{19},\frac{7}{114})

至此,可以发现,f_{4}(x)=f_{3}(x),W_{4}=W_{3},分类函数和强分类器无法再提升,迭代终止。

3.3 得到最终分类器

最终强分类器:

H(x)=sign(f_{3}(x))

3.4 分类迭代展示表

上述计算过程的数据展示如下:

序号12345678910
x(1,4)(2,5)(3,9)(4,1)(5,8)(6,3)(7,10)(8,7)(9,7)(10,9)
y-1-1-1111-11-11
W01/101/101/101/101/101/101/101/101/101/10
h1-1-1-11111111
h2-1-1-1-1-1-1-1111
h311-1111-111-1
f1-0.6931-0.6931-0.69310.69310.69310.69310.69310.69310.69310.6931
sign(f1)-1-1-11111111
W11/161/161/161/161/161/161/161/41/161/4
f2-0.9444-0.9444-0.94440.44180.44180.44180.44180.94440.94440.9444
sign(f2)-1-1-11111111
W21/181/181/181/141/141/142/91/182/71/18
f3-0.7533-0.7533-1.13550.63290.63290.63290.25071.13551.13550.7533
sign(f3)-1-1-11111111
W37/1147/1147/1383/463/463/4614/697/1386/197/114

4、Adaboost算法代码实现

本例中,使用sklearn中的AdaBoostClassifier算法训练分类树。由于该算法中的参数设置原因,最终分类树的结果可能与前述分析不一样。

import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier
df = pd.DataFrame(
    {'x1':[1,2,3,4,5,6,7,8,9,10],
    'x2':[4,5,9,1,8,3,10,7,7,9],
    'y':[-1,-1,-1,1,1,1,-1,1,-1,1]}
)

#决策树模型
X = df.iloc[:,0:2]
y = df.iloc[:,2]

clf = AdaBoostClassifier(n_estimators=5, random_state=0)
clf.fit(X,y)

clf.predict(X)

array([-1, -1, -1,  1,  1,  1, -1,  1, -1,  1])

5、关于算法的说明

1、初始的弱分类器对Adaboost算法的迭代效率和最终分类器的效果都有着比较重要的影响。比如前述例子中,若只用其中两个弱分类器,可能会导致最终的分类器效果变差。在API模块中,往往通过默认的方法选择一定数量的弱分类器。

2、Adaboost算法与GBDT、XGBoost算法虽都是boosting算法,但二者的思路不同。前者通过样本和分类器的权重的不断调整来实现算法的优化,而后者是通过梯度提升来实现算法的优化。

  • 31
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值