提升方法
AdaBoost
算法如下:
(1)假设每个数据具有相同的权值,训练出基分类器
G
1
(
x
)
G_1(x)
G1(x),
(2.1)使用当前加权Dm,进行基分类器的学习
G
m
(
x
)
G_m(x)
Gm(x)。
(2.2)计算误差率,即分类结果与实际结果不相同
e
m
=
∑
i
=
1
N
P
(
G
m
(
x
i
)
≠
y
i
)
=
∑
G
m
(
x
i
)
≠
y
i
w
m
i
e_m = \sum_{i=1}^NP(G_m(x_i)\neq y_i) = \sum_{G_m(x_i)\neq y_i} w_{mi}
em=i=1∑NP(Gm(xi)̸=yi)=Gm(xi)̸=yi∑wmi
其中
w
m
i
w_{mi}
wmi表示每个数据的权值,
∑
w
m
i
=
1
\sum w_{mi}=1
∑wmi=1。
(2.3)计算更新率
α
m
α_m
αm,
e
m
e_m
em约大则
α
m
α_m
αm越小,说明占的比重越小
α
m
=
1
2
l
o
g
1
−
e
m
e
m
α_m = \frac{1}{2}log\frac{1-e_m}{e_m}
αm=21logem1−em
(2.4)更新权值
w
m
+
1
,
i
=
{
W
m
i
Z
m
e
−
α
m
,
G
m
(
x
)
=
y
i
W
m
i
Z
m
e
α
m
,
,
G
m
(
x
)
≠
y
i
w_{m+1,i} = \left\{\begin{array}{cc} \frac{W_mi}{Z_m}e^{-α_m}, & G_m(x)=y_i\\ \frac{W_mi}{Z_m}e^{α_m},, & G_m(x)\neq y_i \end{array}\right.
wm+1,i={ZmWmie−αm,ZmWmieαm,,Gm(x)=yiGm(x)̸=yi
其中Zm使规范化因子
Z
m
=
∑
i
=
1
N
w
m
i
e
x
p
(
−
α
m
y
i
G
m
(
x
i
)
)
Z_m = \sum_{i=1}^Nw_{mi}exp(-α_my_iG_m(x_i))
Zm=i=1∑Nwmiexp(−αmyiGm(xi))
(3)得到最终分类器,
G
(
x
)
=
s
i
g
n
(
f
(
x
)
)
=
s
i
g
n
(
∑
m
=
1
M
α
m
G
m
(
x
i
)
)
G(x) = sign(f(x)) = sign(\sum_{m=1}^Mα_mG_m(x_i))
G(x)=sign(f(x))=sign(m=1∑MαmGm(xi))
向前分布算法
该算法的主要思想为优化损失函数,加法模型如下:
f
(
x
)
=
∑
m
=
1
M
β
m
b
(
x
,
γ
m
)
f(x) = \sum_{m=1}^Mβ_mb(x,\gamma_m)
f(x)=m=1∑Mβmb(x,γm)
其中,
β
m
β_m
βm与AdaBoost算法中的
α
m
α_m
αm类似,为每步新加的东西的权重,
b
(
x
,
γ
m
)
b(x,\gamma_m)
b(x,γm),则是与AdaBoost算法中的分类器类似,是一个加法器所加的东西。我们的目的就是优化损失函数:
m
i
n
β
,
γ
=
∑
i
=
1
N
L
(
y
i
,
∑
m
=
1
M
β
m
b
(
x
i
,
γ
m
)
)
min_{β,\gamma} = \sum_{i=1}^NL( y_i,\sum_{m=1}^Mβ_mb(x_i,\gamma_m))
minβ,γ=i=1∑NL(yi,m=1∑Mβmb(xi,γm))
由于该函数模型的自由度太高,采用贪心算法,只优化每一步的最优值则得到最终的最优值得到优化结果,采用加法进行迭代
m
i
n
β
,
γ
=
∑
i
=
1
N
L
(
y
i
,
β
b
(
x
i
,
γ
)
)
min_{β,\gamma} = \sum_{i=1}^NL( y_i,βb(x_i,\gamma))
minβ,γ=i=1∑NL(yi,βb(xi,γ))
算法如下:
已知:训练集T,损失函数L,基函数
b
(
x
,
γ
m
)
b(x,\gamma_m)
b(x,γm)
(1)初始化模型
f
0
(
x
)
=
0
f_0(x) = 0
f0(x)=0
(2.1)对m = 1,2,…,N
优化损失函数:
m
i
n
β
,
γ
=
∑
i
=
1
N
L
(
y
i
,
f
m
−
1
(
x
i
)
+
β
b
(
x
i
,
γ
)
)
min_{β,\gamma} = \sum_{i=1}^NL( y_i,f_{m-1}(x_i)+βb(x_i,\gamma))
minβ,γ=i=1∑NL(yi,fm−1(xi)+βb(xi,γ))
对式子求偏导通常可解出答案。得到
β
,
γ
β,\gamma
β,γ
(2.2)更新
f
m
(
x
)
=
f
m
−
1
(
x
i
)
+
β
b
(
x
i
,
γ
)
f_{m}(x) =f_{m-1}(x_i)+βb(x_i,\gamma)
fm(x)=fm−1(xi)+βb(xi,γ)
(3)得到加法模型
f
(
x
)
=
∑
m
=
1
M
β
m
b
(
x
,
γ
m
)
f(x) = \sum_{m=1}^Mβ_mb(x,\gamma_m)
f(x)=m=1∑Mβmb(x,γm)
AdaBoost算法是向前分布算法的一个特例。
提升树模型
已知:训练集T,损失函数L,基函数
T
(
x
,
Θ
m
)
T(x,Θ_m)
T(x,Θm)
初始化
f
(
x
)
=
a
r
g
m
i
n
∑
m
=
1
N
L
(
y
i
,
c
)
f(x) = argmin\sum_{m=1}^NL(y_i,c)
f(x)=argminm=1∑NL(yi,c)
对这个进行计算,
r
m
i
=
−
[
∂
L
(
y
i
,
f
(
x
i
)
)
∂
f
(
x
i
)
]
r_{mi} = -[\frac{\partial L(y_i,f(x_i))}{\partial f(x_i)}]
rmi=−[∂f(xi)∂L(yi,f(xi))]
对
r
m
i
r_{mi}
rmi拟合一个回归树,得到节点区域,对节点区域
R
m
j
R_{mj}
Rmj
c
m
j
=
a
r
g
m
i
n
∑
x
i
∈
R
m
i
N
L
(
y
i
,
f
m
−
1
(
x
i
)
+
c
)
c_{mj} = argmin\sum_{x_i∈R_{mi}}^NL( y_i,f_{m-1}(x_i)+c)
cmj=argminxi∈Rmi∑NL(yi,fm−1(xi)+c)
更新
f
m
(
x
)
=
f
m
−
1
(
x
)
+
∑
j
=
1
J
c
m
j
I
(
x
∈
R
m
j
)
f_m(x)=f_{m-1}(x)+\sum_{j=1}^Jc_{mj}I(x∈R_{mj})
fm(x)=fm−1(x)+∑j=1JcmjI(x∈Rmj)
继续拟合,得到回归树。