目录
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=1∑kαiGi(x)=fk−1(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=1∑mexp[−yifk(x)]=argα,Gmini=1∑mexp[−yi(fk−1(x)+αkGk(x))]=argα,Gmini=1∑mexp[−yifk−1(x)]exp[−yiαkGk(x)]
上式中,
y
i
,
f
k
−
1
(
x
)
y_{i},f_{k-1}(x)
yi,fk−1(x)已知,因此,
exp
[
−
y
i
f
k
−
1
(
x
)
]
\exp[-y_{i}f_{k-1}(x)]
exp[−yifk−1(x)]为常数,令:
w
‾
k
i
=
exp
[
−
y
i
f
k
−
1
(
x
)
]
\overline{w}_{ki}=\exp[-y_{i}f_{k-1}(x)]
wki=exp[−yifk−1(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=1∑mwkiexp[−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=1∑mwkiexp[−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)∑wki−e−αkyi=G(xi)∑wki+eαkyi=G(xi)∑wki]=argα,Gmin[e−αki=1∑mwki+(eαk−e−αk)i=1∑mwkiI(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}
∂αk∂L=argα,Gmin[(eαk+e−αk)i=1∑mwkiI(yi=G(xi))−e−αki=1∑mwki]=0⇒e−α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=1mwki∑i=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)Ek⇒1=(e2αk+1)Ek⇒e2αk=Ek1−Ek⇒αk=21logEk1−Ek
(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[−yifk−1(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(fk−1(x)+αkGk(xi))]=exp[−yifk−1(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=1∑mwk,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=1mwki∑i=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=21logEk1−Ek
多分类:
α
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=21logEk1−Ek+log(C−1)
其中,
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=1∑Kα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=max∣yi−Gk(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=Ek∣yi−Gk(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(yi−Gk(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=1−exp(Ek∣yi−Gk(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=1∑mwk,iek,i
f.计算弱学习器系数:
α
k
=
e
k
1
−
e
k
\alpha_{k}=\frac{e_{k}}{1-e_{k}}
αk=1−ekek
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αk1−ek,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=1∑mwk,iαk1−ek,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)=fk−1(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