数学推导#
Obj=∑i=1nL(yi,y^i)+∑k=1KΩ(fk)
Ω(f)=γT+21λ∑j=1Twj2
其中,L表示损失函数,可以是最小二乘,也可以是其他的,比如熵
Ω便是一个正则化项,γ和λ是两个超参
wj是一个很有意思的量,表示权重,这个权重如果不能理解,公式将很难推导,稍后我们详细介绍
那么现在我们开始正式推导:
我们假设yi是真实值,yi−1 (前i-1轮的总和)+ ft(xi)(第i轮预测值)=yi
那么损失函数可以表示为:
L(yi,yi−1+ft(xi))
如果用最小二乘作为演示,可以写作:
L(yi−(yi−1+ft(xi)))
而泰勒公式可以表示为:
f(x0+Δx)=f(x0)+f′(x0)Δx+2!f′′(x0)(Δx)2
显然i-1次预测后,所有的预测值累加起来已经趋近于yi,则新预测值可以被视为Δx
而yi−yi−1自然被视为x0
为了通用性,我们需要对损失函数求偏导,损失函数的yi(真实值)是一个固定的值,我们对y^(也就是预测值)求偏导,获得损失函数的变化率
∂y^∂L(y,y^)
接下来我们带入y^=y^i(t−1)
这就是该函数的一阶导,代表着梯度,也就是朝哪里下降:
gi=[∂y^∂L(yi,y^)]代入 y^=y^i(t−1)
二阶导同理,只需要再求一次偏导,代表着曲率,也就是下降的速度的变化趋势:
hi=[∂y2^∂2L(yi,y^)]代入 y^=y^i(t−1)
这个显然是很好理解的,就是泰勒展开和微积分的运用
下面式子变形为以下形式:
Obj=∑i=1n[L(yi,y^i(t−1))+gift(xi)+21hift2(xi)]+∑k=1t−1Ω(fk)+Ω(ft)
这里的定值显然不影响之后的求导,我们假设的是i-1轮已知,则i-1轮前的参数都可以算出来。
Obj=∑i=1n[gift(xi)+21hift2(xi)]+Ω(ft)
此时我们将Ω带入
Obj=∑i=1n[gift(xi)+21hift2(xi)]+γT+21λ∥w∥2
接下来到了一个比较难以理解的点,那就是gi在这里是不一样的。
为什么不一样呢?我们以最小二乘举个例子,最后偏导的结果就是残差:
y^−yi
在GBDT中,预测值是各个数的平均数(说白了就是减一个同样的值),真实值不一定一样,那么y^−yi显然也不一样。
这里我们可以开始说 w 了,w代表的是叶子权重,而:
叶子权重=ft(xi)
为什么?
XGBoost是一个加法模型,由多棵决策树组成。模型最终给出的预测值 y^i,是所有单棵树预测值(也就是样本落在各棵树对应的叶子权重)的总和:
y^i=∑k=1Kfk(xi)
其中,fk(xi) 就是样本 xi 在第 k 棵树中落入的叶子节点的权重 w。
那么知道了这一点,我们继续往下推导,现在令w相同的gi的和组成Gj,令w相同的hi的和组成Hj,需要注意的是∥w∥2代表着L2范数平方再开平方根,最后的结果就是wj2
Obj=∑j=1T(叶子数)[Gjwj+21Hjwj2]+∑j=1T(叶子数)21λwj2+γT
显然γT也是个常数,可以消去,最终我们对Obj求导:
0=Gj+(Hj+λ)wj
wj=hj+λ−Gj
至此,带入可得:
Obj=∑j=1T[GjHj+λ−Gj−21Hj(Hj+λ−Gj)2]+γT
Obj=−21∑j=1T(Hj+λ−Gj)2+γT
这里还有一个点,就是我们选择yi−yi−1展开的时候,gi就已经是一个定值了。
所以当数进行拆分时,我们可以得到这个公式:
G拆分前=G左+G右
那么,我们最后评分解是否优秀:
Gain=ObjL+R−(ObjL+ObjR)
Gain=[−21HL+HR+λ(GL+GR)2+λT]−[−21(HL+λGL2+HR+λGR2)+γ(T+1)]
当Gain>0,则可分,Gain<0,则不分。