XGBoost目标函数构建个人理解

  XGBoost全称 “Extreme Gradient Boosting“,被称为极端梯度提升法。它利用一连串的决策树,通过学习前一个决策树残差的方式,来不断逼近最终的预测结果,这里着重讲目标函数是如何构建的以及如何生成一棵新的树。

假设我们已经训练了 K K K棵树,那么其对于第 i i i个样本的预测结果为:
y ^ i = ∑ k = 1 K f k ( x i ) \hat y_i=\sum\limits_{k=1}^Kf_k(x_i) y^i=k=1Kfk(xi)

  • 如果是回归问题,那么其最终的预测值就是 y ^ \hat y y^
  • 如果是分类问题,那么最终的结果 y ^ \hat y y^就是其预测值为对应分类的概率( 0 < y ^ < 1 0<\hat y<1 0<y^<1

假设我们一共有 n n n条样本数据,我们可以构建一个统一的目标函数:
O b j = ∑ i = 1 n l ( y i , y ^ i ) + ∑ k = 1 K Ω ( f k ) Obj=\sum\limits_{i=1}^nl(y_i,\hat y_i)+\sum\limits_{k=1}^KΩ(f_k) Obj=i=1nl(yi,y^i)+k=1KΩ(fk)

  • 其中 y i y_i yi是第 i i i个样本的真实值,如果是分类问题那就是1
  • l ( y i , y ^ i ) l(y_i,\hat y_i) l(yi,y^i)是损失函数,对于回归问题我们可以使用MSE,对于分类问题可以使用Cross entropy
  • Ω ( f k ) Ω(f_k) Ω(fk)是对于每棵树的具体约束,防止单棵树过拟合,下面会具体讲

同样对于样本 i i i我们可以得到:
y i ( 0 ) = 0 ( d e f a u l t v a l u e ) y i ( 1 ) = f 1 ( x i ) = y i ( 0 ) + f 1 ( x i ) y i ( 2 ) = f 1 ( x i ) + f 2 ( x i ) = y i ( 1 ) + f 2 ( x i ) . . . y i ( k ) = f 1 ( x i ) + f 2 ( x i ) + . . . + f k − 1 ( x i ) + f k ( x i ) = y i ( k − 1 ) + f k ( x i ) \begin{aligned}y_i^{(0)}&=0\quad(default\quad value)\\y_i^{(1)}=f_1(x_i)&=y_i^{(0)}+f_1(x_i)\\y_i^{(2)}=f_1(x_i)+f_2(x_i)&=y_i^{(1)}+f_2(x_i)\\&.\\&.\\&.\\y_i^{(k)}=f_1(x_i)+f_2(x_i)+...+f_{k-1}(x_i)+f_k(x_i)&=y_{i}^{(k-1)}+f_k(x_i)\end{aligned} yi(0)yi(1)=f1(xi)yi(2)=f1(xi)+f2(xi)yi(k)=f1(xi)+f2(xi)+...+fk1(xi)+fk(xi)=0(defaultvalue)=yi(0)+f1(xi)=yi(1)+f2(xi)...=yi(k1)+fk(xi)
因此,我们可以得到:
O b j = ∑ i = 1 n l ( y i , y ^ i ) + ∑ k = 1 K Ω ( f k ) = ∑ i = 1 n ( y i , y ^ i ( k − 1 ) + f K ( x i ) ) + ∑ k = 1 K − 1 Ω ( f k ) + Ω ( f K ) \begin{aligned}Obj&=\sum\limits_{i=1}^nl(y_i,\hat y_i)+\sum\limits_{k=1}^KΩ(f_k)\\&=\sum\limits_{i=1}^n(y_i,\hat y_i^{(k-1)}+f_K(x_i))+\sum\limits_{k=1}^{K-1}Ω(f_k)+Ω(f_K)\end{aligned} Obj=i=1nl(yi,y^i)+k=1KΩ(fk)=i=1n(yi,y^i(k1)+fK(xi))+k=1K1Ω(fk)+Ω(fK)
这里我们可以假设前 K − 1 K-1 K1棵树都已经构建完成,正要构建第 K K K棵树,因此 ∑ k = 1 K − 1 Ω ( f k ) \sum\limits_{k=1}^{K-1}Ω(f_k) k=1K1Ω(fk)可以看为常数,因为目标函数是优化问题,往往跟常数项无关,因此我们可以不考虑,可以得到:
O b j = ∑ i = 1 n ( y i , y ^ i ( k − 1 ) + f K ( x i ) ) + Ω ( f K ) Obj=\sum\limits_{i=1}^n(y_i,\hat y_i^{(k-1)}+f_K(x_i))+Ω(f_K) Obj=i=1n(yi,y^i(k1)+fK(xi))+Ω(fK)

在这里我们直接对目标函数进行优化比较困难,因此可以选择用泰勒展开去逼近的方法,泰勒公式如下:
f ( x + Δ x ) = f ( x ) + f ′ ( x ) Δ x + 1 2 f ′ ′ ( x ) Δ x 2 + . . . + f ( n ) ( x ) n ! Δ x n + R n ( x ) f(x+\Delta x)=f(x)+f^{'}(x)\Delta x+\frac12f^{''}(x)\Delta x^2+...+\frac{f^{(n)}(x)}{n!}\Delta x^n+R_n(x) f(x+Δx)=f(x)+f(x)Δx+21f(x)Δx2+...+n!f(n)(x)Δxn+Rn(x)
其实泰勒展开到二阶项的时候对应的值已经非常逼近原来的值,即:
f ( x + Δ x ) ≈ f ( x ) + f ′ ( x ) Δ x + 1 2 f ′ ′ ( x ) Δ x 2 f(x+\Delta x)\approx f(x)+f^{'}(x)\Delta x+\frac12f^{''}(x)\Delta x^2 f(x+Δx)f(x)+f(x)Δx+21f(x)Δx2
在这里我们可以将 y ^ i ( k − 1 ) \hat y_i^{(k-1)} y^i(k1)看做是 x x x f K ( x ) f_K(x) fK(x)看做是 Δ x \Delta x Δx,那么 f ( x ) = l ( y i , y ^ i ( k − 1 ) ) f(x)=l(y_i,\hat y_i^{(k-1)}) f(x)=l(yi,y^i(k1)) f ( x + Δ x ) = l ( y i , y ^ i ( k − 1 ) ) + f K ( x i ) f(x+\Delta x)=l(y_i,\hat y_i^{(k-1)})+f_K(x_i) f(x+Δx)=l(yi,y^i(k1))+fK(xi),因此:
O b j ≈ ∑ i = 1 n [ l ( y i , y ^ i ( k − 1 ) ) + l ′ ( y i , y ^ i ( k − 1 ) ) f K ( x i ) + l ′ ′ ( y i , y ^ i ( k − 1 ) ) f K ( x i ) 2 ] + Ω ( f K ) Obj\approx \sum\limits_{i=1}^n[l(y_i,\hat y_i^{(k-1)})+l^{'}(y_i,\hat y_i^{(k-1)})f_K(x_i)+l^{''}(y_i,\hat y_i^{(k-1)})f_K(x_i)^2]+Ω(f_K) Obji=1n[l(yi,y^i(k1))+l(yi,y^i(k1))fK(xi)+l(yi,y^i(k1))fK(xi)2]+Ω(fK)
同样对于优化问题,在前 K − 1 K-1 K1棵决策树已经构建完成的情况下, l ( y i , y ^ i ( k − 1 ) ) l(y_i,\hat y_i^{(k-1)}) l(yi,y^i(k1))可以看做是常数,对整体求解没有影响,因此我们可以将其忽略,同时我们设 g i = l ′ ( y i , y ^ i ( k − 1 ) ) g_i=l^{'}(y_i,\hat y_i^{(k-1)}) gi=l(yi,y^i(k1)) h i = l ′ ′ ( y i , y ^ i ( k − 1 ) ) h_i=l^{''}(y_i,\hat y_i^{(k-1)}) hi=l(yi,y^i(k1)),我们可以得到:
O b j ≈ ∑ i = 1 n [ g i f K ( x i ) + 1 2 h i f K 2 ( x i ) ] + Ω ( f K ) Obj\approx \sum\limits_{i=1}^n[g_if_K(x_i)+\frac{1}{2}h_if^2_K(x_i)]+Ω(f_K) Obji=1n[gifK(xi)+21hifK2(xi)]+Ω(fK)

我们设 q ( x i ) = j q(x_i)=j q(xi)=j为第 i i i个样本在当前决策树的第 j j j个叶子节点上, W ( q ( x i ) ) = W j W(q(x_i))=W_j W(q(xi))=Wj为第 i i i个样本在当前决策树上的值为 W j W_j Wj,同时对于同一棵决策树而言,落在同一个叶子节点上的值为一个集合,我们设落在某一个叶子节点 j j j上的样本点的集合为 I j I_j Ij,同时我们设当前决策树一共有 T T T个叶子结点。

对于决策树问题,我们对其进行的限制无非是有以下三种:

  • 树的深度
  • 叶子节点的个数
  • 叶子节点的值

同样对于二叉树而言叶子节点的个数又可以反映出树的深度,因此我们可以对每一颗决策树进行如下约束:
Ω ( f k ) = γ T + 1 2 λ ∑ j = 1 T W j 2 Ω(f_k)=\gamma T+\frac12\lambda\sum\limits_{j=1}^TW_j^2 Ω(fk)=γT+21λj=1TWj2

  • 其中 γ 、 λ \gamma、\lambda γλ都是超参数,用于约束惩罚力度

因此可以得到:
O b j = ∑ i = 1 n [ g i W ( q ( x i ) ) + 1 2 h i W ( q ( x i ) ) 2 ] + γ T + 1 2 λ ∑ j = 1 T W j 2 = ∑ j = 1 T [ ∑ i ∈ I j ( g i ) W j + 1 2 ∑ i ∈ I j ( h i + λ ) W j 2 ] + γ T \begin{aligned}Obj&=\sum\limits_{i=1}^n[g_iW(q(x_i))+\frac{1}{2}h_iW(q(x_i))^2]+\gamma T+\frac12\lambda\sum\limits_{j=1}^TW_j^2\\&=\sum\limits_{j=1}^T[\sum\limits_{i\in I_j}(g_i)W_j+\frac12\sum\limits_{i\in I_j}(h_i+\lambda)W_j^2]+\gamma T\end{aligned} Obj=i=1n[giW(q(xi))+21hiW(q(xi))2]+γT+21λj=1TWj2=j=1T[iIj(gi)Wj+21iIj(hi+λ)Wj2]+γT
我们的目的是使得该目标函数最小,我们设 G j = ∑ i ∈ I j ( g i ) G_j=\sum\limits_{i\in I_j}(g_i) Gj=iIj(gi) H j = ∑ i ∈ I j ( h i ) H_j=\sum\limits_{i\in I_j}(h_i) Hj=iIj(hi)

对于 G j W j + 1 2 H j W j 2 G_jW_j+\frac12H_jW_j^2 GjWj+21HjWj2,由于 G j G_j Gj H j H_j Hj都可以看作是常数,因此就可以将其看做一个未知数为 W j W_j Wj的二次函数,可以得到,当 W j ∗ = − G j H j + λ W_j^*=-\frac{G_j}{H_j+\lambda} Wj=Hj+λGj时, O b j Obj Obj取得最小值 O b j ∗ = − 1 2 ∑ j = 1 T G j 2 H j + λ + γ T Obj^*=-\frac12\sum\limits_{j=1}^T\frac{G_j^2}{H_j+\lambda}+\gamma T Obj=21j=1THj+λGj2+γT

这里有个大假设是我们已经知道树的形状(叶子结点的个数 T T T是个定值)

  • 因此我们可以利用 O b j Obj Obj去构建决策树,而非简单利用信息熵或者基尼系数,即每分裂一个节点列举所有可能的分裂方式,选择使得 O b j Obj Obj最小的方式去分裂

你可能感兴趣的:(机器学习,决策树,机器学习,算法)