XGBoost目标函数推导
独特的目标函数
梯度提升算法中都存在着损失函数。不同于逻辑回归和 S V M SVM SVM 等算法中固定的损失函数写法,集成算法中的损失函数是可选的,要选用什么损失函数取决于我们希望解决什么问题,以及希望使用怎样的模型。比如说,如果我们的目标是进行回归预测 ,那我们可以选择调节后的均方误差 R M S E RMSE RMSE 作为我们的损失函数。如果我们是进行分类预测 那我们可以选择错误率 e r r o r error error 或者对数损失 l o s s l o g loss_{log} losslog 。只要我们选出的函数是一个可微的,能够代表某种损失的函数它就可以作为 X G B XGB XGB 的损失函数 。
在众多机器学习算法中,损失函数的核心是衡量模型的泛化能力,即模型在未知数据上的预测的准确性,我们训练模型的核心目标也是希望模型能够预测度。在 X G B XGB XGB中,预测准确自然是非常重要的因素, X G B XGB XGB 实现了模型表现和运算速度的平衡的算法。普通的损失函数,比如错误率,均方误差等,都只能够衡量模型的表现,无法衡量模型的运算速度。回忆一下,我们曾在许多模型中使用空间复杂度和时间复杂度来衡量模型的运算效率。 X G B XGB XGB因此引入了模型复杂度来衡量算法的运算效率。因此 X G B XGB XGB 的目标函数被写作: 传统损失函数 + 模型复杂度 。
O b j = ∑ i = 1 m l ( y i , y ^ i ) + ∑ k = 1 K Ω ( f k ) Obj = \sum_{i=1}^m l(y_i,\hat y_i) + \sum_{k=1}^K \Omega (f_k) Obj=∑i=1ml(yi,y^i)+∑k=1KΩ(fk)
上式中的 第一项用来衡量偏差 ,模型越不准确,第一项就会越大。 第二项是用来衡量方差 ,模型越复杂,模型的学习就会越具体,到不同数据集上的表现就会差异巨大,方差就会越大。所以我们求解的最小值,其实是在求解方差与偏差的平衡点,以求模型的泛化误差最小,运行速度最快。其中 i i i代表数据集中的第 i i i个样本, m m m表示导入第 k k k棵树的数据总量, K K K代表建立的所有树。 第一项代表传统的损失函数 ,衡量真实标签 y i y_i yi与预测值 y ^ i \hat y_i y^i之间的差异,通常是根据模型的用途进行选择。 第二项代表模型的复杂度 ,使用树模型的某种变换表示,这个变化代表了一个从树的结构来衡量树模型的复杂度的式子,可以有多种定义。注意,我们的 第二项中没有特征矩阵 的介入。我们在迭代每一棵树的过程中,都最小化来力求获取最优的,因此我们同时最小化了模型的错误率和模型的复杂度。
树模型和树的集成模型是天生的 过拟合 的模型,因此我们必须通过 剪枝 来控制模型不要过拟合。现在 X G B XGB XGB的损失函数中的正则项自带限制方差变大的部分,也就是说 X G B XGB XGB会比其他的树模型更加聪明,不会轻易过拟合。
第一项传统损失函数看起来却只和样本量相关,其实并非如此,我们的第一项传统损失函数也是与已经建好的所有树相关的,相关在这里:
y ^ i ( t ) = ∑ k t f k ( x i ) = ∑ k t − 1 f k ( x i ) + f t ( x i ) \hat y_i^{(t)} = \sum_{k}^{t}f_k(x_{i}) = \sum_k^{t-1}f_k(x_{i}) + f_t(x_{i}) y^i(t)=∑ktfk(xi)=∑kt−1fk(xi)+ft(xi)
优化XGB目标函数
1.用 G B D T GBDT GBDT梯度提升树表达方式 X G B XGB XGB
O b j ( t ) = ∑ i = 1 m l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) + ∑ k = 1 K Ω ( f k ) Obj^{(t)} = \sum_{i=1}^m l(y_i,\hat y_i^{(t-1)}+f_t(x_i)) + \sum_{k=1}^K \Omega (f_k) Obj(t)=∑i=1ml(yi,y^i(t−1)+ft(xi))+∑k=1KΩ(fk)
为了便于理解,对 l ( y i , x ) 在 y ^ i ( t − 1 ) 处进行泰勒展开得到: l(y_i,x)在\hat y_i^{(t-1)}处进行泰勒展开得到: l(yi,x)在y^i(t−1)处进行泰勒展开得到:
l ( y i , x ) = l ( y i , y ^ i ( t − 1 ) ) + l ′ ( y i , y ^ i ( t − 1 ) ) ( x − y ^ i ( t − 1 ) ) + 1 2 l " ( y i , y ^ i ( t − 1 ) ) ( x − y ^ i ( t − 1 ) ) 2 l(y_i,x) = l^{}(y_i,\hat y_i^{(t-1)})+l^{'}(y_i,\hat y_i^{(t-1)})(x-\hat y_i^{(t-1)})+\frac{1}{2}l^{"}(y_i,\hat y_i^{(t-1)})(x-\hat y_i^{(t-1)})^2 l(yi,x)=l(yi,y^i(t−1))+l′(yi,y^i(t−1))(x−y^i(t−1))+21l"(yi,y^i(t−1))(x−y^i(t−1))2
令 x = y ^ i ( t − 1 ) + f t ( x i ) x= \hat y_i^{(t-1)}+f_t(x_i) x=y^i(t−1)+ft(xi),代入上式得:
l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) = l ( y i , y ^ i ( t − 1 ) ) + l ′ ( y i , y ^ i ( t − 1 ) ) ( y ^ i ( t − 1 ) + f t ( x i ) − y ^ i ( t − 1 ) ) + 1 2 l " ( y i , y ^ i ( t − 1 ) ) ( y ^ i ( t − 1 ) + f t ( x i ) − y ^ i ( t − 1 ) ) 2 l(y_i,\hat y_i^{(t-1)}+f_t(x_i)) = l^{}(y_i,\hat y_i^{(t-1)})+l^{'}(y_i,\hat y_i^{(t-1)})(\hat y_i^{(t-1)}+f_t(x_i)-\hat y_i^{(t-1)})+\frac{1}{2}l^{"}(y_i,\hat y_i^{(t-1)})(\hat y_i^{(t-1)}+f_t(x_i)-\hat y_i^{(t-1)})^2 l(yi,y^i(t−1)+ft(xi))=l(yi,y^i(t−1))+l′(yi,y^i(t−1))(y^i(t−1)+ft(xi)−y^i(t−1))+21l"(yi,y^i(t−1))(y^i(t−1)+ft(xi)−y^i(t−1))2
合并整理得到:
l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) = l ( y i , y ^ i ( t − 1 ) ) + l ′ ( y i , y ^ i ( t − 1 ) ) f t ( x i ) + 1 2 l " ( y i , y ^ i ( t − 1 ) ) f t ( x i ) 2 l(y_i,\hat y_i^{(t-1)}+f_t(x_i)) = l^{}(y_i,\hat y_i^{(t-1)})+ l^{'}(y_i,\hat y_i^{(t-1)})f_t(x_i)+\frac{1}{2}l^{"}(y_i,\hat y_i^{(t-1)})f_t(x_i)^2 l(yi,y^i(t−1)+ft(xi))=l(yi,y^i(t−1))+l′(yi,y^i(t−1))ft(xi)+21l"(yi,y^i(t−1))ft(xi)2
令 g i = l ′ ( y i , y ^ i ( t − 1 ) ) , h i = l " ( y i , y ^ i ( t − 1 ) ) g_i = l^{'}(y_i,\hat y_i^{(t-1)}), h_i = l^{"}(y_i,\hat y_i^{(t-1)}) gi=l′(yi,y^i(t−1)),hi=l"(yi,y^i(t−1))得:
l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) = l ( y i , y ^ i ( t − 1 ) ) + g i f t ( x i ) + 1 2 h i f t ( x i ) 2 l(y_i,\hat y_i^{(t-1)}+f_t(x_i)) = l^{}(y_i,\hat y_i^{(t-1)})+ g_i f_t(x_i)+\frac{1}{2}h_if_t(x_i)^2 l(yi,y^i(t−1)+ft(xi))=l(yi,y^i(t−1))+gift(xi)+21hift(xi)2
2.代入目标函数可得到:
O b j ( t ) = ∑ i = 1 m [ l ( y i , y ^ i ( t − 1 ) ) + g i f t ( x i ) + 1 2 h i f t ( x i ) 2 ] + ∑ k = 1 t Ω ( f k ) Obj^{(t)} = \sum_{i=1}^m [l^{}(y_i,\hat y_i^{(t-1)})+ g_i f_t(x_i)+\frac{1}{2}h_if_t(x_i)^2] + \sum_{k=1}^t \Omega (f_k) Obj(t)=∑i=1m[l(yi,y^i(t−1))+gift(xi)+21hift(xi)2]+∑k=1tΩ(fk)
3.正则化项展开去除常数项:
由于是前向计算, t − 1 t-1 t−1颗树的结构已经确定了,所以可以确定一下式子均是常数项:
l ( y i , y ^ i ( t − 1 ) ) l^{}(y_i,\hat y_i^{(t-1)}) l(yi,y^i(t−1))
∑ k = 1 t − 1 Ω ( f k ) \sum_{k=1}^{t-1} \Omega(f_k) ∑k=1t−1Ω(fk)
故目标函数可以表示为:
O b j ( t ) = ∑ i = 1 m [ g i f t ( x i ) + 1 2 h i f t ( x i ) 2 ] + Ω ( f t ) + C Obj^{(t)} = \sum_{i=1}^m [g_i f_t(x_i)+\frac{1}{2}h_if_t(x_i)^2] + \Omega (f_t) +C Obj(t)=∑i=1m[gift(xi)+21hift(xi)2]+Ω(ft)+C
4.合并一次项系数,二次项系数
首先定义一棵树,包括两个部分:1.叶子节点的权重向量 w w w;2.叶子节点的映射关系 q q q;则一棵树的表达式如下图所示:
其次定义树的复杂度,包括两个部分:1.叶子节点的数量 T T T;2.叶子节点权重向量的 l 2 l_2 l2范数,数学语言描述如下图所示:
接着带入目标函数,对结点进行分组,目前目标函数中子函数求和是按照样本点累加,变换后是先按照叶子节点分组后再累加,此处有点不好理解。
令: f t ( x i ) = w q ( x i ) f_t(x_i) = w_{q(x_i)} ft(xi)=wq(xi),且 Ω ( f t ) = γ T + 1 2 λ ∑ j = 1 T ω j 2 \Omega (f_t) = \gamma T + \frac{1}{2} \lambda \sum_{j=1}^T \omega_j^2 Ω(ft)=γT+21λ∑j=1Tωj2代入目标函数得:
O b j ( t ) = ∑ i = 1 m [ g i w q ( x i ) + 1 2 h i w q ( x i ) 2 ] + γ T + 1 2 λ ∑ j = 1 T ω j 2 + C Obj^{(t)} = \sum_{i=1}^m [g_i w_{q(x_i)} + \frac{1}{2}h_i w_{q(x_i)}^2] + \gamma T + \frac{1}{2} \lambda \sum_{j=1}^T \omega_j^2 +C Obj(t)=∑i=1m[giwq(xi)+21hiwq(xi)2]+γT+21λ∑j=1Tωj2+C
将所有训练样本按照叶子节点进行分组得,此处得分类思想是先将单个叶子节点的样本求和,再合并所有叶子节点:
O b j ( t ) = ∑ j = 1 T [ ( ∑ i ∈ I j g i ) w j + 1 2 ( ∑ i ∈ I j h i ) w j 2 ] + γ T + 1 2 λ ∑ j = 1 T ω j 2 + C Obj^{(t)} = \sum_{j=1}^T [(\sum_{i \in I_j} g_i) w_{j} + \frac{1}{2} (\sum_{i \in I_j} h_i) w_{j}^2] + \gamma T + \frac{1}{2} \lambda \sum_{j=1}^T \omega_j^2 +C Obj(t)=∑j=1T[(∑i∈Ijgi)wj+21(∑i∈Ijhi)wj2]+γT+21λ∑j=1Tωj2+C
合并同类项得:
O b j ( t ) = ∑ j = 1 T [ ( ∑ i ∈ I j g i ) w j + 1 2 ( λ + ∑ i ∈ I j h i ) w j 2 ] + γ T + C Obj^{(t)} = \sum_{j=1}^T [(\sum_{i \in I_j} g_i) w_{j} + \frac{1}{2} (\lambda +\sum_{i \in I_j} h_i) w_{j}^2] + \gamma T +C Obj(t)=∑j=1T[(∑i∈Ijgi)wj+21(λ+∑i∈Ijhi)wj2]+γT+C
最后,合并一次项系数、二次项系数。
令: G j = ∑ i ∈ I j g i , H j = ∑ i ∈ I j h i G_j = \sum_{i \in I_j} g_i , H_j = \sum_{i \in I_j} h_i Gj=∑i∈Ijgi,Hj=∑i∈Ijhi,其中, G j G_j Gj为叶子节点 j j j所包含样本的一阶偏导累加之和,是个常数, H j H_j Hj同理。
将 G j G_j Gj 和 H j H_j Hj 代入目标函数得:此时变量只剩下第t颗树的权重向量 ω \omega ω得到 X G B XGB XGB的最终目标函数。
O b j ( t ) = ∑ j = 1 T [ G j w j + 1 2 ( λ + H j ) w j 2 ] + γ T + C Obj^{(t)} = \sum_{j=1}^T [G_j w_{j} + \frac{1}{2} (\lambda +H_j) w_{j}^2] + \gamma T +C Obj(t)=∑j=1T[Gjwj+21(λ+Hj)wj2]+γT+C
XGBoost目标函数解
由XGB目标函数可知,每个叶子节点的目标函数为:
f ( ω j ) = G j ω j + 1 2 ( λ + H j ) w j 2 f(\omega_j) = G_j \omega_j + \frac{1}{2} (\lambda +H_j) w_{j}^2 f(ωj)=Gjωj+21(λ+Hj)wj2
是关于 ω j \omega _j ωj的一元二次函数, ( λ + H j ) > 0 (\lambda +H_j)>0 (λ+Hj)>0,则 f ( ω j ) f(\omega_j) f(ωj)在 ω j = − G j / ( H j + λ ) \omega _j = -G_j/(H_j+\lambda) ωj=−Gj/(Hj+λ)处取最小值,最小值为: − G j 2 / 2 ( H j + λ ) -G_j^2/2(H_j+\lambda) −Gj2/2(Hj+λ)
XGB 目标函数的各个叶子节点的目标式是相互独立的,即每个叶子节点的式子都达到了最值点,整个目标函数也达到了最值点,则每个叶子节点的权重 ω j ∗ \omega _j^* ωj∗ 及此时达到的最优 O b j Obj Obj目标值为:
ω i ∗ = − G j H j + λ \omega _i^* = -\frac{G_j}{H_j+\lambda} ωi∗=−Hj+λGj
O b j = − 1 2 ∑ j = 1 T G j 2 H j + λ + γ T Obj = -\frac{1}{2} \sum_{j=1}^T \frac{G_j^2}{H_j+\lambda} + \gamma T Obj=−21∑j=1THj+λGj2+γT