梯度提升决策树(Gradient Boosting Decision Tree, GBDT)是一种基于boosting集成学习思想的加法模型,训练时采用前向分布算法进行贪婪学习,每次迭代都学习一棵CART树来拟合之前 t − 1 t-1 t−1棵树的训练样本真实值的残差。
CART(Classification and Regression tree)
最小二乘回归算法
输入:训练数据集
D
D
D。
输出:回归树
f
(
x
)
f(x)
f(x)。
在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域的输出值,构建二叉决策树:
- 选择最优切分变量
j
j
j与切分点
s
s
s,求解:
min i , s [ min C 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min C 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \min_{i,s} [\min_{C_{1}}\sum_{x_i\in R_1(j,s)}(y_i-c_1)^2+\min_{C_2}\sum_{x_i \in R_2(j,s)}(y_i-c_2)^2 ] i,smin[C1minxi∈R1(j,s)∑(yi−c1)2+C2minxi∈R2(j,s)∑(yi−c2)2]
遍历变量 j j j,对固定的切分变量 j j j扫描切分点 s s s,选择使上式达到最小值的对 ( j , s ) (j,s) (j,s)。 - 用选择的对
(
j
,
s
)
(j,s)
(j,s)划分区域并决定相应的输出值:
R 1 ( j , s ) = { x ∣ x ( j ) ≤ s } R_1(j,s)=\{x|x^{(j)}\le s\} R1(j,s)={x∣x(j)≤s}
R 1 ( j , s ) = { x ∣ x ( j ) > s } R_1(j,s)=\{x|x^{(j)}> s\} R1(j,s)={x∣x(j)>s}
C ^ m = 1 N m ∑ x i ∈ R 1 ( j , s ) y i , x ∈ R m , m = 1 , 2 \hat{C}_m=\frac{1}{N_m}\sum_{x_i\in R_1(j,s)}y_i, x\in R_m,m=1,2 C^m=Nm1xi∈R1(j,s)∑yi,x∈Rm,m=1,2 - 继续对两个子区域调用步骤1和2,直至停止条件
- 将输入空间划分为
M
M
M个区域
R
1
,
R
2
,
.
.
.
,
R
M
R_1,R_2,...,R_M
R1,R2,...,RM,生成决策树:
f ( x ) = ∑ m = 1 M C ^ m I ( x ∈ R m ) f(x)=\sum_{m=1}^{M}\hat{C}_mI(x\in R_m) f(x)=m=1∑MC^mI(x∈Rm)
GBDT(Gradient Boosting Decision Tree)
假设GBDT里有k个CART。其中第k个CART记为
T
k
(
X
)
T_k(X)
Tk(X),前k个CART的预测值记为
f
k
(
x
)
=
∑
i
=
1
k
T
i
(
x
)
f_k(x)=\sum_{i=1}^{k}T_i(x)
fk(x)=i=1∑kTi(x)
GBDT是一种加法模型,它把所有基础模型的预测值累加起来作为最终的预测值,可把前K个CART的预测值表示为一个递归的形式:
f
k
(
x
)
=
f
k
−
1
(
x
)
+
T
k
(
x
)
f_k(x)=f_{k-1}(x)+T_k(x)
fk(x)=fk−1(x)+Tk(x)
训练第k个CART时,最小化目标函数:
J
=
∑
n
=
1
N
L
(
y
n
,
f
k
(
x
n
)
)
=
∑
n
=
1
N
L
(
y
n
,
f
k
−
1
(
x
)
+
T
k
(
x
)
)
J=\sum_{n=1}^{N}L(y_n,f_k(x_n))=\sum_{n=1}^{N}L(y_n,f_{k-1}(x)+T_k(x))
J=n=1∑NL(yn,fk(xn))=n=1∑NL(yn,fk−1(x)+Tk(x))
利用梯度下降法:
f
k
(
x
n
)
=
f
k
−
1
(
x
n
)
−
α
∂
J
∂
f
k
−
1
(
x
n
)
f_k(x_n)=f_{k-1}(x_n)-\alpha \frac{\partial J}{\partial f_{k-1}(x_n)}
fk(xn)=fk−1(xn)−α∂fk−1(xn)∂J
T
k
(
x
n
)
=
−
α
∂
J
∂
f
k
−
1
(
x
n
)
T_k(x_n)=-\alpha \frac{\partial J}{\partial f_{k-1}(x_n)}
Tk(xn)=−α∂fk−1(xn)∂J
通常回归任务中用残差平方和作为目标函数
J
=
∑
n
=
1
N
L
(
y
n
,
f
k
(
x
n
)
)
=
∑
n
−
1
N
1
2
(
y
n
−
f
k
(
x
n
)
)
2
J=\sum_{n=1}^{N}L(y_n,f_k(x_n))=\sum_{n-1}^{N}\frac{1}{2}{(y_n-f_k(x_n))}^2
J=n=1∑NL(yn,fk(xn))=n−1∑N21(yn−fk(xn))2
因此有
T
k
(
x
n
)
=
−
α
∂
J
∂
f
k
−
1
(
x
n
)
=
y
n
−
f
k
−
1
(
x
n
)
T_k(x_n)=-\alpha \frac{\partial J}{\partial f_{k-1}(x_n)}=y_n-f_{k-1}(x_n)
Tk(xn)=−α∂fk−1(xn)∂J=yn−fk−1(xn)
也就是说,GBDT的每一颗CART树的任务,是拟合之前所有CART留下的残差。