GBDT
GBDT,全称Gradient Boosting Decision Tree。
CART
在GBDT中使用的回归树模型为CART。其算法为
[1]对于每个节点处,当前数据集为
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
n
,
y
n
)
}
D=\{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\}
D={(x1,y1),(x2,y2),...,(xn,yn)},对于每个特征
j
j
j,寻找最优划分节点
s
s
s,使得据此可将
D
D
D划分为
R
1
R_1
R1和
R
2
R_2
R2,满足
min
j
,
s
[
∑
x
i
∈
R
1
(
y
i
−
c
1
)
2
+
∑
x
i
∈
R
2
(
y
i
−
c
2
)
2
]
\min\limits_{j,s}[\sum\limits_{x_i\in{R_1}}(y_i-c_1)^2+\sum\limits_{x_i\in{R_2}}(y_i-c_2)^2]
j,smin[xi∈R1∑(yi−c1)2+xi∈R2∑(yi−c2)2]
其中
c
1
=
1
N
1
∑
x
i
∈
R
1
y
i
c_1=\frac{1}{N_1}\sum\limits_{x_i\in{R_1}}y_i
c1=N11xi∈R1∑yi
c
2
=
1
N
2
∑
x
i
∈
R
2
y
i
c_2=\frac{1}{N_2}\sum\limits_{x_i\in{R_2}}y_i
c2=N21xi∈R2∑yi
[2]对于每棵划分出来的子树,递归进行操作[1],直到满足停止条件。
[3]返回树T。
另外,若是分类树,则其划分依据为最小基尼指数
G
i
n
i
(
D
,
A
)
=
∣
D
1
∣
∣
D
∣
G
i
n
i
(
D
1
)
+
∣
D
2
∣
∣
D
∣
G
i
n
i
(
D
2
)
Gini(D,A)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2)
Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)
当样本数少于既定阈值或样本Gini指数小于既定基尼指数或没有更多特征时则停止划分。这里不详述。
下面讲述剪枝过程。
[1]设
k
=
0
k=0
k=0,
T
=
T
0
T=T_0
T=T0,
a
=
+
∞
a=+\infty
a=+∞
[2]自下而上对内部节点
t
t
t计算:
g
(
t
)
=
C
t
−
C
(
T
t
)
∣
T
t
∣
−
1
g(t)=\frac{C_t-C(T_t)}{|T_t|-1}
g(t)=∣Tt∣−1Ct−C(Tt)
a
=
m
i
n
(
a
,
g
(
t
)
)
a=min(a,g(t))
a=min(a,g(t))
[3]自上而下的访问内部节点
t
t
t,对最小的
g
(
t
)
=
a
g(t)=a
g(t)=a进行剪枝,并对叶节点
t
t
t以多数表决形式决定其类别,得到树
T
T
T
[4]
k
=
k
+
1
k=k+1
k=k+1,
a
k
=
a
a_k=a
ak=a,
T
k
=
T
T_k=T
Tk=T
[5]如果
T
T
T为非单节点树,返回[3]
[6]对于产生的子树序列
{
T
0
,
T
1
,
.
.
.
,
T
n
}
\{T_0,T_1,...,T_n\}
{T0,T1,...,Tn}分别计算损失,得到最优子树
T
∗
T^*
T∗并返回。
梯度提升
GBDT作为boosting类模型中的一种,采用迭代的方式对学习器进行优化。假设前一轮迭代得到强学习器 f t − 1 ( x ) f_{t-1}(x) ft−1(x),损失函数为 L ( y , f t − 1 ( x ) ) L(y,f_{t-1}(x)) L(y,ft−1(x)),则本轮迭代目标为寻找CART回归树模型的弱学习器 h t ( x ) h_t(x) ht(x),使得本轮损失 L ( y , f t ( x ) = f t − 1 ( x ) + h t ( x ) ) L(y,f_t(x)=f_{t-1}(x)+h_t(x)) L(y,ft(x)=ft−1(x)+ht(x))最小。
算法流程
[1]初始化弱学习器
f
0
(
x
)
=
a
r
g
m
i
n
γ
∑
i
=
1
N
L
(
y
i
,
γ
)
f_0(x)=argmin_\gamma\sum\limits_{i=1}\limits^{N}L(y_i,\gamma)
f0(x)=argminγi=1∑NL(yi,γ)
[2]对每个样本i=1,2,…,N,计算负梯度,即残差
r
i
m
=
−
[
∂
L
(
y
i
,
f
(
x
i
)
)
∂
f
(
x
i
)
]
f
(
x
)
=
f
m
−
1
r_{im}=-[\frac{\partial L(y_i,f(x_i))}{\partial f(x_i)}]_{f(x)=f_{m-1}}
rim=−[∂f(xi)∂L(yi,f(xi))]f(x)=fm−1
[3]将上一步得到的残差作为样本新的真实值,并将数据
(
x
i
,
r
i
m
)
(
i
=
1
,
2
,
.
.
.
,
N
)
(x_i,r_{im})(i=1,2,...,N)
(xi,rim)(i=1,2,...,N)作为下一棵树的训练数据,得到新的回归树
f
m
(
x
)
f_m(x)
fm(x),其对应叶子节点区域为
R
j
m
,
j
=
1
,
2
,
.
.
.
,
J
R_{jm},j=1,2,...,J
Rjm,j=1,2,...,J。其中
J
J
J为回归树的叶子节点的个数。
[4]对于叶子区域
j
=
1
,
2
,
.
.
.
,
J
j=1,2,...,J
j=1,2,...,J计算最佳拟合值
r
j
m
=
a
r
g
m
i
n
∑
x
i
∈
R
j
m
L
(
y
i
,
f
m
−
1
(
x
i
)
+
γ
)
r_{jm}=argmin\sum\limits_{x_i\in{R_{jm}}}L(y_i,f_{m-1}(x_i)+\gamma)
rjm=argminxi∈Rjm∑L(yi,fm−1(xi)+γ)
[5]更新学习器
f
m
(
x
)
=
f
m
−
1
(
x
)
+
∑
j
=
1
J
γ
j
m
I
(
x
∈
R
j
m
)
f_m(x)=f_{m-1}(x)+\sum\limits_{j=1}\limits^{J}\gamma _{jm}I(x \in R_{jm})
fm(x)=fm−1(x)+j=1∑JγjmI(x∈Rjm)
[6]从步骤[2]重复重复进行,直至满足迭代终止条件
[7]得到强学习器
f
(
x
)
=
f
M
(
x
)
=
f
0
(
x
)
+
∑
m
=
1
M
∑
j
=
1
J
γ
j
m
I
(
x
∈
R
j
m
)
f(x)=f_M(x)=f_0(x)+\sum\limits_{m=1}\limits^{M}\sum\limits_{j=1}\limits^{J}\gamma _{jm}I(x \in R_{jm})
f(x)=fM(x)=f0(x)+m=1∑Mj=1∑JγjmI(x∈Rjm)