1.Gradient Boosted Decision Tree(GBDT)
AdaBoost中的模型是二分类模型;扩展到任意的error function后,可以得到
min
η
min
h
1
N
∑
n
=
1
N
e
r
r
(
∑
τ
=
1
t
−
1
a
τ
h
τ
(
x
n
)
+
η
h
t
(
x
n
)
,
y
n
)
.
.
.
.
.
.
.
.
.
.
(
1
)
\min_\eta \min_h \frac{1}{N}\sum_{n=1}^Nerr\left(\sum_{\tau=1}^{t-1}a_\tau h_\tau(x_n)+\eta h_t(x_n),y_n\right)..........(1)
ηminhminN1n=1∑Nerr(τ=1∑t−1aτhτ(xn)+ηht(xn),yn)..........(1)
可以配合任意的预测函数(通常是实数型输出)。其中式子(1)是新的融合模型——GradientBoost的形式,也是一种框架。它可以配合很多的算法,解决regression,或者soft classification等问题。
如果让GradientBoost应用到回归问题,使用平方误差函数,则会有
{
min
η
min
h
1
N
∑
n
=
1
N
e
r
r
(
∑
τ
=
1
t
−
1
a
τ
h
τ
(
x
n
)
+
η
h
t
(
x
n
)
,
y
n
)
e
r
r
(
s
,
y
)
=
(
s
−
y
)
2
.
.
.
.
.
.
.
.
.
.
(
2
)
\begin{cases} \min\limits_\eta \min\limits_h \frac{1}{N}\sum\limits_{n=1}^Nerr\left(\sum\limits_{\tau=1}^{t-1}a_\tau h_\tau(x_n)+\eta h_t(x_n),y_n\right) \\ err(s,y)=(s-y)^2 \end{cases}..........(2)
⎩⎨⎧ηminhminN1n=1∑Nerr(τ=1∑t−1aτhτ(xn)+ηht(xn),yn)err(s,y)=(s−y)2..........(2)
其损失变为
L
(
y
,
(
∑
τ
=
1
t
−
1
a
τ
h
τ
(
x
n
)
+
η
h
t
(
x
n
)
,
y
n
)
)
=
[
y
−
f
m
−
1
(
x
)
−
η
h
t
(
x
n
)
]
2
=
[
r
−
η
h
t
(
x
n
)
]
2
\begin{aligned} &L(y,\left(\sum\limits_{\tau=1}^{t-1}a_\tau h_\tau(x_n)+\eta h_t(x_n),y_n\right)) \\ &= [y-f_{m-1}(x)-\eta h_t(x_n)]^2 \\ &=[r-\eta h_t(x_n)]^2 \end{aligned}
L(y,(τ=1∑t−1aτhτ(xn)+ηht(xn),yn))=[y−fm−1(x)−ηht(xn)]2=[r−ηht(xn)]2
r=y-
f
m
−
1
(
x
)
f_{m-1}(x)
fm−1(x)是当前数据拟合的残差,所以对于回归问题的提升树算法中,只需要简单地拟合当前模型的残差即可。
其中
(
2
)
≈
t
a
y
l
o
r
min
h
1
N
∑
n
=
1
N
e
r
r
(
S
n
,
y
n
)
+
1
N
∑
n
=
1
N
η
h
(
x
n
)
∂
e
r
r
∂
s
∣
S
=
S
n
=
min
h
c
o
n
s
t
a
n
t
s
+
η
N
∑
n
=
1
N
h
(
x
n
)
⋅
2
(
S
n
−
y
n
)
\begin{aligned} (2) &\approx^{taylor} \min_h \frac{1}{N}\sum_{n=1}^Nerr(S_n,y_n)+\frac{1}{N}\sum_{n=1}^N\eta h(x_n)\left .\frac{\partial err}{\partial s}\right|_{S=S_n} \\ &=\min_h\quad constants +\frac{\eta}{N}\sum_{n=1}^Nh(x_n)·2(S_n-y_n) \end{aligned}
(2)≈taylorhminN1n=1∑Nerr(Sn,yn)+N1n=1∑Nηh(xn)∂s∂err∣∣∣∣S=Sn=hminconstants+Nηn=1∑Nh(xn)⋅2(Sn−yn)
关于h的大小其实无所谓,因为它只是个方向,
η
\eta
η 会在下一步优化它。为了限制h的大小,将h作为一个惩罚项放到式子中。
min
h
c
o
n
s
t
a
n
t
s
+
η
N
∑
n
=
1
N
(
h
(
x
n
)
⋅
2
(
S
n
−
y
n
)
+
h
(
x
n
)
2
)
=
c
o
n
s
t
a
n
t
s
+
η
N
∑
n
=
1
N
(
c
o
n
s
t
a
n
t
+
(
h
(
x
n
)
−
(
y
n
−
s
n
)
)
2
)
\begin{aligned} &\min_h\quad constants +\frac{\eta}{N}\sum_{n=1}^N(h(x_n)·2(S_n-y_n)+h(x_n)^2)\\ &= \quad constants +\frac{\eta}{N}\sum_{n=1}^N(constant + (h(x_n)-(y_n-s_n))^2) \end{aligned}
hminconstants+Nηn=1∑N(h(xn)⋅2(Sn−yn)+h(xn)2)=constants+Nηn=1∑N(constant+(h(xn)−(yn−sn))2)
y
n
−
s
n
y_n-s_n
yn−sn是想要的y和目前已经得到的分数的差,称之为残差,因此我们的优化目标转换为求
x
n
x_n
xn和
y
n
−
s
n
y_n-s_n
yn−sn的回归问题。
经过上面的步骤,我们求得了最优的h,接下来要求解
η
\eta
η。对于
η
\eta
η的求解,我们需要做一步转换:
min
η
1
N
∑
n
=
1
N
(
s
n
+
η
h
t
(
x
n
)
−
y
n
)
2
=
1
N
∑
n
=
1
N
(
(
y
n
−
s
n
)
−
η
h
t
(
x
n
)
)
2
\min_\eta \frac{1}{N}\sum_{n=1}^N(s_n+\eta h_t(x_n)-y_n)^2=\frac{1}{N}\sum_{n=1}^N((y_n-s_n)-\eta h_t(x_n))^2
ηminN1n=1∑N(sn+ηht(xn)−yn)2=N1n=1∑N((yn−sn)−ηht(xn))2
经过转变后,求解
η
\eta
η问题变为以
h
t
h_t
ht为权重,
η
\eta
η为变量,输出为残差的线性回归问题,因此只要解决线性回归问题就可以得到
η
\eta
η
GBDT算法流程总结如下:
- 初始化 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0
- 对于m=1,2,…,M,计算残差 r m , i = y i − f m − 1 ( x i ) , i = 1 , 2 , . . . , N r_{m,i}=y_i-f_{m-1}(x_i),i=1,2,...,N rm,i=yi−fm−1(xi),i=1,2,...,N,拟合残差 r m . i r_{m.i} rm.i学习一个回归树,得到 T ( x ; θ m ) T(x;\theta_m) T(x;θm),更新 f m ( x ) = f m − 1 ( x ) + T ( x ; θ m ) f_m(x)=f_{m-1}(x)+T(x;\theta_m) fm(x)=fm−1(x)+T(x;θm)
- 得到回归问题提升树
f
M
(
x
)
=
∑
i
=
1
M
T
(
x
;
θ
m
)
f_M(x)=\sum_{i=1}^MT(x;\theta_m)
fM(x)=i=1∑MT(x;θm)
决策树除了与Gradient Boost组成形成GBDT算法之外,还有两种典型的算法,比如Random Forest 和 AdaBoost-DTree。
3.Random Forest
组成:Bagging+Decision Tree
使用bootstraping取样得到T份不同的样本,得到T棵决策树,将这些决策树融合起来,就可以得到随机森林。
4.AdaBoost-DTree
一棵树,如果无限制的划分下去,能够得到一颗完全长成的树,任何训练样本都能够很好地划分,也就是说我们的训练误差
ϵ
=
0
\epsilon=0
ϵ=0。
对于AdaBoost来说,
ϵ
=
0
\epsilon=0
ϵ=0意味着缩放因子
t
=
ln
1
−
ϵ
ϵ
t=\ln \sqrt{\frac{1-\epsilon}{\epsilon}}
t=lnϵ1−ϵ无限大。因此,我们需要对树做一些限制,比如不使用所有的训练样本,或者是限制树的高度。我们称它为pruned tree。
同时,使用AdaBoost还有一个问题,就是AdaBoost中的样本是有权重的,也就是说我们得实现一颗带权重的决策树。有没有办法避免这种情况呢?答案是有的。对于一个权重为x的样本,我们只要从样本集合中取出x份该样本进行训练即可。这样在决策树的训练过程中,就隐含了样本的权重。
当树的高度只剩下两层时,这种情况下的树被称为AdaBoost-Stump。