AdaBoost和前向分步算法
AdaBoost可以理解为一个前向分步算法,前向分步算法是一个加法模型,其表达式为:
f
(
x
)
=
∑
t
=
1
T
α
t
h
t
(
x
)
f(x)=\sum_{t=1}^T \alpha_th_t(x)
f(x)=t=1∑Tαtht(x)
对应于上面公式推导的弱分类器的输出。
在AdaBoost中的前向分步算法的损失函数为指数损失函数:
L
(
y
,
f
(
x
)
)
=
e
x
p
[
−
y
f
(
x
)
]
L(y,f(x))=exp[-yf(x)]
L(y,f(x))=exp[−yf(x)]
假设我们现在有前
t
−
1
t-1
t−1个弱分类器,要求下一个弱分类器,输入可以表达为:
H
t
(
x
)
=
H
t
−
1
+
α
t
h
t
(
x
)
H_t(x)=H_{t-1}+\alpha_th_t(x)
Ht(x)=Ht−1+αtht(x)(我们上面讲的
f
(
x
)
f(x)
f(x)相当于
H
T
(
x
)
H_T(x)
HT(x))。
代入数据得损失函数为:
L
=
∑
n
=
1
N
e
x
p
[
−
y
n
H
t
(
x
n
)
]
=
∑
n
=
1
N
e
x
p
[
−
y
n
(
H
t
−
1
(
x
n
)
+
α
t
h
t
(
x
n
)
)
]
=
∑
n
=
1
N
e
x
p
[
−
y
n
H
t
−
1
(
x
n
)
]
e
x
p
[
−
y
n
α
t
h
t
(
x
n
)
]
令
D
t
(
x
n
)
=
e
x
p
[
−
y
n
H
t
−
1
(
x
n
)
]
,
等
价
于
上
面
推
导
的
权
值
更
新
(
少
了
归
一
化
)
。
=
∑
n
=
1
N
D
t
(
x
n
)
e
x
p
[
−
y
n
α
t
h
t
(
x
n
)
]
=
e
x
p
[
α
t
]
∑
y
n
≠
h
t
(
x
n
)
D
t
(
x
n
)
+
e
x
p
[
−
α
t
]
∑
y
n
=
h
t
(
x
n
)
D
t
(
x
n
)
=
ϵ
t
e
x
p
[
α
t
]
+
(
1
−
ϵ
t
)
e
x
p
[
−
α
t
]
\begin{aligned} L&=\sum_{n=1}^{N}exp[-y_nH_t(x_n)]\\ &=\sum_{n=1}^{N}exp[-y_n(H_{t-1}(x_n)+\alpha_th_t(x_n))]\\ &=\sum_{n=1}^{N}exp[-y_nH_{t-1}(x_n)]exp[-y_n\alpha_th_t(x_n)]\\ &令D_{t}(x_n)=exp[-y_nH_{t-1}(x_n)],等价于上面推导的权值更新(少了归一化)。\\ &=\sum_{n=1}^{N}D_{t}(x_n)exp[-y_n\alpha_th_t(x_n)]\\ &=exp[\alpha_t]\sum_{y_n\neq h_t(x_n)}D_{t}(x_n)+exp[-\alpha_t]\sum_{y_n= h_t(x_n)}D_{t}(x_n)\\ &=\epsilon_t exp[\alpha_t]+(1-\epsilon_t)exp[-\alpha_t] \end{aligned}
L=n=1∑Nexp[−ynHt(xn)]=n=1∑Nexp[−yn(Ht−1(xn)+αtht(xn))]=n=1∑Nexp[−ynHt−1(xn)]exp[−ynαtht(xn)]令Dt(xn)=exp[−ynHt−1(xn)],等价于上面推导的权值更新(少了归一化)。=n=1∑NDt(xn)exp[−ynαtht(xn)]=exp[αt]yn̸=ht(xn)∑Dt(xn)+exp[−αt]yn=ht(xn)∑Dt(xn)=ϵtexp[αt]+(1−ϵt)exp[−αt]
对
L
L
L关于
ϵ
t
\epsilon_t
ϵt求导,得
α
t
=
1
2
log
1
−
ϵ
t
ϵ
t
\alpha_t=\frac{1}{2}\log \frac{1-\epsilon_t}{\epsilon_t}
αt=21logϵt1−ϵt。