二十七.集成学习之Adaboost的原理和sklearn实现

1.简介

Adaboost为加法模型,学习算法为前向分步学习算法。
作为经典的boosting算法,Adaboost通过计算前一个基学习器的误差率,更新后一个基学习器的系数和样本集的权重系数,最后再通过结合策略进行预测。
理论上任何学习器都可以用于Adaboost。但一般来说,使用最广泛的Adaboost弱学习器是决策树和神经网络。对于决策树,Adaboost分类用了CART分类树,而Adaboost回归用了CART回归树。

2.二分类样本权重和弱学习器系数推导

通过推导二分类的样本权重和弱学习器系数,可以了解Adaboost的工作原理。

(1)弱学习器系数推导

假设第 k k k轮的强学习器为 f k ( x ) f_{k}(x) fk(x),弱学习器为 G k ( x ) G_{k}(x) Gk(x),根据加法模型和前向分布学习算法,可知它们之间的关系为:
f k ( x ) = ∑ i = 1 k α i G i ( x ) = f k − 1 ( x ) + α k G k ( x ) f_{k}(x)=\sum_{i=1}^{k}\alpha _{i}G_{i}(x)=f_{k-1}(x)+\alpha _{k}G_{k}(x) fk(x)=i=1kαiGi(x)=fk1(x)+αkGk(x)
二分类问题中,Adaboost的损失函数为指数函数,则第 k k k轮的损失为:
L ( α k , G k ( x ) ) = arg ⁡ min ⁡ α , G ∑ i = 1 m exp ⁡ [ − y i f k ( x ) ] = arg ⁡ min ⁡ α , G ∑ i = 1 m exp ⁡ [ − y i ( f k − 1 ( x ) + α k G k ( x ) ) ] = arg ⁡ min ⁡ α , G ∑ i = 1 m exp ⁡ [ − y i f k − 1 ( x ) ] exp ⁡ [ − y i α k G k ( x ) ] \begin{aligned} L(\alpha _{k},G_{k}(x)) &= \arg\min_{\alpha ,G}\sum_{i=1}^{m}\exp[-y_{i}f_{k}(x)]\\ &=\arg\min_{\alpha ,G}\sum_{i=1}^{m}\exp[-y_{i}(f_{k-1}(x)+\alpha _{k}G_{k}(x))] \\ &= \arg\min_{\alpha ,G}\sum_{i=1}^{m}\exp[-y_{i}f_{k-1}(x)]\exp[-y_{i}\alpha _{k}G_{k}(x)]\\ \end{aligned} L(αk,Gk(x))=argα,Gmini=1mexp[yifk(x)]=argα,Gmini=1mexp[yi(fk1(x)+αkGk(x))]=argα,Gmini=1mexp[yifk1(x)]exp[yiαkGk(x)]
上式中, y i , f k − 1 ( x ) y_{i},f_{k-1}(x) yi,fk1(x)已知,因此, exp ⁡ [ − y i f k − 1 ( x ) ] \exp[-y_{i}f_{k-1}(x)] exp[yifk1(x)]为常数,令:
w ‾ k i = exp ⁡ [ − y i f k − 1 ( x ) ] \overline{w}_{ki}=\exp[-y_{i}f_{k-1}(x)] wki=exp[yifk1(x)]
则第 k k k轮的损失函数更新为:
L ( α k , G k ( x ) ) = arg ⁡ min ⁡ α , G ∑ i = 1 m w ‾ k i exp ⁡ [ − y i α k G k ( x ) ] L(\alpha _{k},G_{k}(x))=\arg\min_{\alpha ,G}\sum_{i=1}^{m}\overline{w}_{ki}\exp[-y_{i}\alpha _{k}G_{k}(x)] L(αk,Gk(x))=argα,Gmini=1mwkiexp[yiαkGk(x)]
在二分类任务中,当弱学习器的预测结果和标签一致时,即 y i = G k ( x i ) y_{i}=G_{k}(x_{i}) yi=Gk(xi),则:
− y i α k G k ( x i ) = − α k -y_{i}\alpha _{k}G_{k}(x_{i})=-\alpha _{k} yiαkGk(xi)=αk
不一致时,即 y i ≠ G k ( x i ) y_{i}\neq G_{k}(x_{i}) yi=Gk(xi),则:
− y i α k G k ( x i ) = α k -y_{i}\alpha _{k}G_{k}(x_{i})=\alpha _{k} yiαkGk(xi)=αk
由此可将损失函数进一步更新:
L ( α k , G k ( x ) ) = arg ⁡ min ⁡ α , G ∑ i = 1 m w ‾ k i exp ⁡ [ − y i α k G k ( x ) ] = arg ⁡ min ⁡ α , G [ ∑ y i = G ( x i ) w ‾ k i exp ⁡ ( − α k ) + ∑ y i ≠ G ( x i ) w ‾ k i exp ⁡ ( α k ) ] = arg ⁡ min ⁡ α , G [ e − α k ∑ y i = G ( x i ) w ‾ k i + e α k ∑ y i ≠ G ( x i ) w ‾ k i ] = arg ⁡ min ⁡ α , G [ e − α k ∑ y i = G ( x i ) w ‾ k i + e − α k ∑ y i ≠ G ( x i ) w ‾ k i − e − α k ∑ y i ≠ G ( x i ) w ‾ k i + e α k ∑ y i ≠ G ( x i ) w ‾ k i ] = arg ⁡ min ⁡ α , G [ e − α k ∑ i = 1 m w ‾ k i + ( e α k − e − α k ) ∑ i = 1 m w ‾ k i I ( y i ≠ G ( x i ) ) ] \begin{aligned} L(\alpha _{k},G_{k}(x))&=\arg\min_{\alpha ,G}\sum_{i=1}^{m}\overline{w}_{ki}\exp[-y_{i}\alpha _{k}G_{k}(x)]\\ &= \arg\min_{\alpha ,G}[\sum_{y_{i}=G(x_{i})}\overline{w}_{ki}\exp(-\alpha _{k})+\sum_{y_{i}\neq G(x_{i})}\overline{w}_{ki}\exp(\alpha _{k})]\\ &=\arg\min_{\alpha ,G}[e^{-\alpha _{k}}\sum_{y_{i}=G(x_{i})}\overline{w}_{ki}+e^{\alpha _{k}}\sum_{y_{i}\neq G(x_{i})}\overline{w}_{ki}]\\ &=\arg\min_{\alpha ,G}[e^{-\alpha _{k}}\sum_{y_{i}=G(x_{i})}\overline{w}_{ki}+e^{-\alpha _{k}}\sum_{y_{i}\neq G(x_{i})}\overline{w}_{ki}-e^{-\alpha _{k}}\sum_{y_{i}\neq G(x_{i})}\overline{w}_{ki}+e^{\alpha _{k}}\sum_{y_{i}\neq G(x_{i})}\overline{w}_{ki}]\\ &=\arg\min_{\alpha ,G}[e^{-\alpha _{k}}\sum_{i=1}^{m}\overline{w}_{ki}+(e^{\alpha _{k}}-e^{-\alpha _{k}})\sum_{i=1}^{m}\overline{w}_{ki}I(y_{i}\neq G(x_{i}))] \end{aligned} L(αk,Gk(x))=argα,Gmini=1mwkiexp[yiαkGk(x)]=argα,Gmin[yi=G(xi)wkiexp(αk)+yi=G(xi)wkiexp(αk)]=argα,Gmin[eαkyi=G(xi)wki+eαkyi=G(xi)wki]=argα,Gmin[eαkyi=G(xi)wki+eαkyi=G(xi)wkieαkyi=G(xi)wki+eαkyi=G(xi)wki]=argα,Gmin[eαki=1mwki+(eαkeαk)i=1mwkiI(yi=G(xi))]
上式对 α k \alpha _{k} αk求导可得:
∂ L ∂ α k = arg ⁡ min ⁡ α , G [ ( e α k + e − α k ) ∑ i = 1 m w ‾ k i I ( y i ≠ G ( x i ) ) − e − α k ∑ i = 1 m w ‾ k i ] = 0 ⇒ e − α k = ( e α k + e − α k ) ∑ i = 1 m w ‾ k i I ( y i ≠ G ( x i ) ) ∑ i = 1 m w ‾ k i \begin{aligned} \frac{\partial L}{\partial \alpha _{k}}&=\arg\min_{\alpha ,G}[(e^{\alpha _{k}}+e^{-\alpha _{k}})\sum_{i=1}^{m}\overline{w}_{ki}I(y_{i}\neq G(x_{i}))-e^{-\alpha _{k}}\sum_{i=1}^{m}\overline{w}_{ki}]\\ &=0\\ &\Rightarrow e^{-\alpha _{k}}=\frac{(e^{\alpha _{k}}+e^{-\alpha _{k}})\sum_{i=1}^{m}\overline{w}_{ki}I(y_{i}\neq G(x_{i}))}{\sum_{i=1}^{m}\overline{w}_{ki}} \end{aligned} αkL=argα,Gmin[(eαk+eαk)i=1mwkiI(yi=G(xi))eαki=1mwki]=0eαk=i=1mwki(eαk+eαk)i=1mwkiI(yi=G(xi))
由错误率的定义可知,第 k k k轮分类错误率为加权误差比:
E k = ∑ i = 1 m w ‾ k i I ( y i ≠ G ( x i ) ) ∑ i = 1 m w ‾ k i E_{k}=\frac{\sum_{i=1}^{m}\overline{w}_{ki}I(y_{i}\neq G(x_{i}))}{\sum_{i=1}^{m}\overline{w}_{ki}} Ek=i=1mwkii=1mwkiI(yi=G(xi))
E k E_{k} Ek带入 e − α k e^{-\alpha _{k}} eαk得第 k k k轮弱学习器的系数:
e − α k = ( e α k + e − α k ) E k ⇒ 1 = ( e 2 α k + 1 ) E k ⇒ e 2 α k = 1 − E k E k ⇒ α k = 1 2 log ⁡ 1 − E k E k \begin{aligned} e^{-\alpha _{k}} &= (e^{\alpha _{k}}+e^{-\alpha _{k}})E_{k}\\ &\Rightarrow 1=(e^{2\alpha _{k}}+1)E_{k}\\ &\Rightarrow e^{2\alpha _{k}}=\frac{1-E_{k}}{E_{k}}\\ &\Rightarrow \alpha _{k}=\frac{1}{2}\log\frac{1-E_{k}}{E_{k}} \end{aligned} eαk=(eαk+eαk)Ek1=(e2αk+1)Eke2αk=Ek1Ekαk=21logEk1Ek

(2)样本权重系数推导

训练过程中,第一轮的样本权重系数通过初始化得到,之后的权重系数可以根据以上过程推导:
已知第 k k k轮的权重系数为:
w ‾ k i = exp ⁡ [ − y i f k − 1 ( x i ) ] \overline{w}_{ki}=\exp[-y_{i}f_{k-1}(x_{i})] wki=exp[yifk1(xi)]
则第 k + 1 k+1 k+1轮的权重系数为:
w ‾ k + 1 , i = exp ⁡ [ − y i f k ( x ) ] = exp ⁡ [ − y i ( f k − 1 ( x ) + α k G k ( x i ) ) ] = exp ⁡ [ − y i f k − 1 ( x ) ] exp ⁡ [ − y i α k G k ( x i ) ] = w ‾ k , i exp ⁡ [ − y i α k G k ( x i ) ] \begin{aligned} \overline{w}_{k+1,i}&=\exp[-y_{i}f_{k}(x)] \\ &= \exp[-y_{i}(f_{k-1}(x)+\alpha _{k}G_{k}(x_{i}))]\\ &= \exp[-y_{i}f_{k-1}(x)]\exp[-y_{i}\alpha _{k}G_{k}(x_{i})]\\ &=\overline{w}_{k,i}\exp[-y_{i}\alpha _{k}G_{k}(x_{i})] \end{aligned} wk+1,i=exp[yifk(x)]=exp[yi(fk1(x)+αkGk(xi))]=exp[yifk1(x)]exp[yiαkGk(xi)]=wk,iexp[yiαkGk(xi)]
由此可得第 k + 1 k+1 k+1轮时的权重系数 w ‾ k + 1 , i \overline{w}_{k+1,i} wk+1,i
通常,在计算的时候,会对权重系数进行归一化处理,具体做法为:
w k + 1 , i = w k , i Z k exp ⁡ [ − y i α k G k ( x i ) ] w_{k+1,i}=\frac{w_{k,i}}{Z_{k}}\exp[-y_{i}\alpha _{k}G_{k}(x_{i})] wk+1,i=Zkwk,iexp[yiαkGk(xi)]
其中, Z k Z_{k} Zk为使原式归一化的规范因子:
Z k = ∑ i = 1 m w k , i exp ⁡ [ − y i α k G k ( x i ) ] Z_{k}=\sum_{i=1}^{m}w_{k,i}\exp[-y_{i}\alpha _{k}G_{k}(x_{i})] Zk=i=1mwk,iexp[yiαkGk(xi)]

3.Adaboost分类算法流程

输入: m m m n n n维样本,每个样本有一个标签 y y y,弱分类器 G ( x ) G(x) G(x)迭代数量 K K K
输出:强学习器 f ( x ) f(x) f(x)
a.初始化样本集权重:
w 1 = ( w 1 , 1 , w 1 , 2 , w 1 , 3 , . . . , w 1 , m ) w 1 , i = 1 m \mathbf{w}_{1}=(w_{1,1},w_{1,2},w_{1,3},...,w_{1,m})\\ w_{1,i}=\frac{1}{m} w1=(w1,1,w1,2,w1,3,...,w1,m)w1,i=m1
b.使用具有权重 w k \mathbf{w}_{k} wk的样本集训练出第 k k k个弱学习器 G k ( x ) G_{k}(x) Gk(x)
c.计算出 G k ( x ) G_{k}(x) Gk(x)的加权分类误差率:
E k = ∑ i = 1 m w ‾ k i I ( y i ≠ G ( x i ) ) ∑ i = 1 m w ‾ k i E_{k}=\frac{\sum_{i=1}^{m}\overline{w}_{ki}I(y_{i}\neq G(x_{i}))}{\sum_{i=1}^{m}\overline{w}_{ki}} Ek=i=1mwkii=1mwkiI(yi=G(xi))
d.计算弱分类器的系数:
二分类:
α k = 1 2 log ⁡ 1 − E k E k \alpha _{k}=\frac{1}{2}\log\frac{1-E_{k}}{E_{k}} αk=21logEk1Ek
多分类:
α k = 1 2 log ⁡ 1 − E k E k + log ⁡ ( C − 1 ) \alpha _{k}=\frac{1}{2}\log\frac{1-E_{k}}{E_{k}}+\log(C-1) αk=21logEk1Ek+log(C1)
其中, C C C为类别数。
e.更新下一轮样本权重:
w k + 1 , i = w k , i Z k exp ⁡ [ − y i α k G k ( x i ) ] w_{k+1,i}=\frac{w_{k,i}}{Z_{k}}\exp[-y_{i}\alpha _{k}G_{k}(x_{i})] wk+1,i=Zkwk,iexp[yiαkGk(xi)]
f.重复(2)到(4)直到训练出 K K K个若学习器,最终预测模型为:
f ( x ) = s i g n ( ∑ k = 1 K α k G k ( x i ) ) f(x)=sign(\sum_{k=1}^{K}\alpha _{k}G_{k}(x_{i})) f(x)=sign(k=1KαkGk(xi))

4.Adaboost回归算法流程

输入: m m m n n n维样本,每个样本有一个标签 y y y,弱分类器 G ( x ) G(x) G(x)迭代数量 K K K
输出:强学习器 f ( x ) f(x) f(x)
a.初始化样本集权重:
w 1 = ( w 1 , 1 , w 1 , 2 , w 1 , 3 , . . . , w 1 , m ) w 1 , i = 1 m \mathbf{w}_{1}=(w_{1,1},w_{1,2},w_{1,3},...,w_{1,m})\\ w_{1,i}=\frac{1}{m} w1=(w1,1,w1,2,w1,3,...,w1,m)w1,i=m1
b.使用具有权重 w k \mathbf{w}_{k} wk的样本集训练出第 k k k个弱学习器 G k ( x ) G_{k}(x) Gk(x)
c.计算所有预算值的最大误差:
E k = max ⁡ ∣ y i − G k ( x i ) ∣ E_{k}=\max|y_{i}-G_{k}(x_{i})| Ek=maxyiGk(xi)
d.计算出每个预测值的相对误差:
线性误差:
e k , i = ∣ y i − G k ( x i ) ∣ E k e_{k,i}=\frac{|y_{i}-G_{k}(x_{i})|}{E_{k}} ek,i=EkyiGk(xi)
平方误差:
e k , i = ( y i − G k ( x i ) ) 2 E k 2 e_{k,i}=\frac{(y_{i}-G_{k}(x_{i}))^{2}}{E_{k}^{2}} ek,i=Ek2(yiGk(xi))2
指数误差:
e k , i = 1 − exp ⁡ ( ∣ y i − G k ( x i ) ∣ E k ) e_{k,i}=1-\exp(\frac{|y_{i}-G_{k}(x_{i})|}{E_{k}}) ek,i=1exp(EkyiGk(xi))
e.计算当前预测结果的误差率:
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=1mwk,iek,i
f.计算弱学习器系数:
α k = e k 1 − e k \alpha_{k}=\frac{e_{k}}{1-e_{k}} αk=1ekek
g.更新下一轮的样本权重:
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=Zkwk,iαk1ek,i
其中, 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=1mwk,iαk1ek,i
h.重复(2)到(7)直到训练出 K K K个若学习器。

5.Adaboost正则化

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)=fk1(x)+vαkGk(x)
其中, v v v为惩罚系数,取值范围 ( 0 , 1 ] (0,1] (0,1]
惩罚系数越小,需要迭代的次数越多。

6.sklearn实现Adaboost

from sklearn import ensemble,tree,datasets
iris=datasets.load_iris()
x,y=iris.data,iris.target
model = ensemble.AdaBoostClassifier(tree.DecisionTreeClassifier())
model.fit(x,y)
print(model.score(x,y))

输出:

1.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值