本文主要介绍GBDT(Gradient Boosting Decision Tree)的实现原理。
算法

其中,F0表示决策回归树的初始值。
损失函数为:
ψ(y,F(x))=−yloge(p)−(1−y)loge(1−p),其中p=1+exp(−F(x))1
推导过程
- 损失函数处理
首先进行化简:
ψ(y,F(x))=yln(1+exp(−F(x)))−(1−y)ln(1+exp(−F(x))exp(−F(x)))=yln(1+exp(−F(x)))−(1−y)(−F(x)−ln(1+exp(−F(x))))=(1−y)F(x)+yln(1+exp(−F(x)))+(1−y)ln(1+exp(−F(x)))=(1−y)F(x)+ln(1+exp(−F(x)))=−yF(x)+F(x)+ln(1+exp(−F(x)))=−yF(x)+ln(exp(F(x)))+ln(1+exp(−F(x)))=−yF(x)+ln(exp(F(x))∗(1+exp(−F(x)))=−yF(x)+ln(1+exp(F(x)))=−(yF(x)−ln(1+exp(F(x))))
接着进行求导:
ψ′(y,F(x))=−y+σ(F(x)),其中σ(F(x))=1+exp(−F(x))1
ψ′′(y,F(x))=σ(F(x))(1−σ(F(x)))
- 决策回归树初始值计算
F0(x)=ρ
F0(x)=argminρi=1∑Nψ(yi,ρ)=argminρH(ρ)=−i=1∑N(yiρ−log(1+exp(ρ)))
我们需要得到一个最小值作为决策回归树的初始值,以使信息熵最小。使用的方法仍然是求导,取导数为零时的值。这里H(ρ)即代表整体的损失函数。
H′(ρ)=−i=1∑N(yi−σ(ρ))=−i=1∑N(yi−1+exp(−ρ)1)
导数为零时,得到结果。
0=−i=1∑N(yi−1+exp(−ρ)1)
i=1∑Nyi=i=1∑N1+exp(−ρ)1
由于exp(ρ)为常数,所以
i=1∑Nyi=1+exp(−ρ)N
1+exp(−ρ)=i=1∑Nyii=1∑N1
exp(−ρ)=i=1∑Nyii=1∑N(1−yi)
对左右两边分别进行对数运算
−ρ=logi=1∑Nyii=1∑N(1−yi)
最终得到
ρ=logi=1∑N(1−yi)i=1∑Nyi
- 在第m轮的学习中,CART的第j个叶子节点的得分γmj
L(γmj,Rmj)=∑xi∈Rmjψ(y,Fm−1(x)+γmj)
根据泰勒展开公式(只取前三项,所以是约等于):
L(γmj,Rmj)≈∑xi∈Rmj{ψ(y,Fm−1(x))+ψ′(y,Fm−1(x))γmj+21ψ′′(y,Fm−1(x))γmj2}
令σ(F(x))=1+exp(−F(x))1,则
ψ(y,F(x))=−yF(x)+ln(1+exp(F(x)))=−(yF(x)−ln(1+exp(F(x))))
ψ′(y,F(x))=−y+1+exp(F(x))1∗exp(F(x))=−y+1+exp(−F(x))1=−y+1+exp(−F(x))1=−y=−y+σ(F(x))
ψ′′(y,F(x))=[1+exp(−F(x))]2exp(−F(x))=(y−y)(1−y+y)=(y−(y−1+exp(−F(x))1))(1−y+y−1+exp(−F(x))1)=1+exp(−F(x))1(1−1+exp(−F(x))1)=σ(F(x))(1−σ(F(x)))
最后求γmj的值
γmj=argminγmjL(γmj,Rmj)=argminγmj∑xi∈Rmj{ψ(yi,Fm−1(xi))+ψ′(yi,Fm−1(xi))γmj+21ψ′′(yi,Fm−1(xi))γmj2}
导数为零时得到结果
0=∑xi∈Rmj{ψ′(yi,Fm−1(xi))+ψ′′(yi,Fm−1(xi))∗γmj}
0=∑xi∈Rmj{−yi+(yi−yi)(1−yi+yi)∗γmj}
∑xi∈Rmjyi=∑xi∈Rmj(yi−yi)(1−yi+yi)∗γmj
∑xi∈Rmjyi=(∑xi∈Rmj(yi−yi)(1−yi+yi))∗γmj
γmj=∑xi∈Rmj(yi−yi)(1−yi+yi)∑xi∈Rmjyi
可以将γmj看作是梯度下降中的梯度,那么就有梯度更新规则
Fm(x)=Fm−1(x)+γm∗learning_rate