Xgboost原理解释和目标函数推导

Xgboost原理解释和目标函数推导

X g b o o s t 解决问题的核心思路:    在使用决策树解决一些实际问题时,在创建第一棵树时,能够得到的效果不一定能够达到任务的要求,   所以我们需要创建多棵树,来共同解决问题,得到理想的效果,所以 X g b o o s t 的最核心的要求就是,   在添加每一棵决策树时,最后的结果都必须有一定的提升,故 X g b o o s t 是个提升模型。   用表达式来表示为:   y ^ i ( 0 ) = 0   y ^ i ( 1 ) = f 1 ( x i ) = y ^ i ( 0 ) + f 1 ( x i )                        p s : f 1 ( x i )    表示第一棵树的 f u n c t i o n    y ^ i ( 1 ) 加了第一棵树的预测值   y ^ i ( 2 ) = f 1 ( x i ) = y ^ i ( 0 ) + f 2 ( x i ) = y ^ i ( 1 ) + f 2 ( x i )   ⋯   y ^ i ( t ) = ∑ k = 1 t f k ( x i ) = y ^ i ( t − 1 ) + f t ( x i )              p s : y ^ i ( t ) 第 t 轮的模型预测   y ^ i ( t − 1 ) 保留前 t − 1 轮的模型预测  f t ( x i ) 加入第 t 棵树   为防止模型的过拟合,我们引入一个惩罚函数: Ω ( f t ) = γ T + 1 2 λ ∑ j = 1 T w j 2   其中 γ 为系数可以理解为惩罚力度, T 表示叶子的个数, w j 表示每个叶子的权重值, 1 2 λ ∑ j = 1 T w j 2 为 L 2 正则化项     X g b o o s t 公式推导:   为了在实际问题中使用该思想,我们需要为具体任务设定一个目标函数,并经过多次迭代得到最佳结果,假设我们的目标函数为:   O b j ( t ) = ∑ i = 1 n l ( y i , y ^ ( t ) ) + ∑ i = 1 t Ω ( f i )   我们知道 X g b o o s t 最核心思想是,每次我们选取决策树,都必须使得我们设定的目标函数尽可能大的降低,所以我们的目标函数进一步变成:   O b j ( t ) = ∑ i = 1 n l ( y i , y ^ ( t − 1 ) + f t ( x i ) ) + ∑ i = 1 t Ω ( f i )   +   c o n s tan ⁡ t    p s : f t ( x i ) 表示我们下一步将要选取的决策树, c o n s tan ⁡ t 表示计算中的常数项   此时,我们的目标就可以转换成:找到一个 f t 用来优化上方的目标函数。   通过观察目标函数我们可以发现,在 l ( y i , y ^ ( t − 1 ) + f t ( x i ) ) 中,我们可以将 y i , y ^ ( t − 1 ) 看作 x ,将 f t ( x i ) 看作 Δ x ,此时等式变成 l ( x + Δ x ) ,   由于我们需要得到最优解,我们很容易想到求导操作,进而想到使用泰勒公式展开。   泰勒展开式为: f ( x + Δ x ) ≃ f ( x ) + f ′ ( x ) Δ x + 1 2 f ′ ′ ( x ) Δ x 2   为了等式简单,我们定义:   g i = ∂ y ^ ( t − 1 ) l ( y i , y ^ ( t − 1 ) ) ,   h i = ∂ y ^ ( t − 1 ) 2 l ( y i , y ^ ( t − 1 ) )   O b j ( t ) ≃ ∑ i = 1 n [ l ( y i , y ^ ( t − 1 ) ) + g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ] + Ω ( f t ) +    c o n s tan ⁡ t   由于, l ( y i , y ^ ( t − 1 ) ) 表示前 t − 1 棵树的预测值,可以看作为常数值,故目标函数进一步化简为:   O b j ( t ) ≃ ∑ i = 1 n [ g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ] + Ω ( f t ) +    c o n s tan ⁡ t      其中: g i = ∂ y ^ ( t − 1 ) l ( y i , y ^ ( t − 1 ) ) ,    h i = ∂ y ^ ( t − 1 ) 2 l ( y i , y ^ ( t − 1 ) )   O b j ( t ) ≃ ∑ i = 1 n [ g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ] + Ω ( f t ) +    c o n s tan ⁡ t      p s :由于常数项求导为0,故可以暂时将常数项不看,得到下式         = ∑ i = 1 n [ g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ] + Ω ( f t )   p s :把惩罚函数 Ω ( f t ) = γ T + 1 2 λ ∑ j = 1 T w j 2 代入得到下式         = ∑ i = 1 n [ g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ] + γ T + 1 2 λ ∑ j = 1 T w j 2   p s :第 t 棵树的 f u n c t i o n 即 f t ( x i ) ,其实本质上就是权重参数,即 f t ( x i ) = w q ( x i ) 代入得到下式         = ∑ j = 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   p s : n 表示样本个数,用 ∑ i n 表示逐样本遍历, T 表示叶子节点个数,用 ∑ j = 1 T 表示逐叶子姐节点遍历,用 ∑ i ∈ I j 表示每个叶子节点中的样本个数,因此得到下式         = ∑ 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 w j 2   p s : w q ( x i )  表示单个样本的权重, w j 表示叶子结点的权重   前后合并得到:         = ∑ j = 1 T [ ( ∑ i ∈ I j g i ) w j + 1 2 ( ∑ i ∈ I j h i + λ ) w j 2 ] + γ T   为了进一步化简目标函数,我们令:   G j = ∑ i ∈ I j g i ,   H j = ∑ i ∈ I j h i   p s : G j 表示所有样本一阶导的累加和, H j 示所有样本二阶导的累加和,带入目标函数得   O b j ( t ) = ∑ j = 1 T [ G j w j + 1 2 ( H j + λ ) w j 2 ] + γ T   回顾我们的任务,找到目标函数的最优解,我们对 f t ( w j ) = G j w j + 1 2 ( H j + λ ) w j 2 求一阶导得:   ∂ J ( f t ) ∂ w j = G j + ( H j + λ ) w j = 0   解得: w j = − G j H j + λ ,带入目标函数为:   O b j = − 1 2 ∑ j = 1 T G j 2 H j + λ + γ T . \\ Xgboost\text{解决问题的核心思路:\ }\\ ~\\ \text{在使用决策树解决一些实际问题时,在创建第一棵树时,能够得到的效果不一定能够达到任务的要求,}\\ ~\\ \text{所以我们需要创建多棵树,来共同解决问题,得到理想的效果,所以}Xgboost\text{的最核心的要求就是,}\\ ~\\ \text{在添加每一棵决策树时,最后的结果都必须有一定的提升,故}Xgboost\text{是个提升模型。}\\ ~\\ \text{用表达式来表示为:}\\ ~\\ \hat{y}_{i}^{\left( 0 \right)}=0\\ ~\\ \hat{y}_{i}^{\left( 1 \right)}=f_1\left( x_i \right) =\hat{y}_{i}^{\left( 0 \right)}+f_1\left( x_i \right) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ps:f_1\left( x_i \right) \,\,\text{表示第一棵树的}function\ \ \hat{y}_{i}^{\left( 1 \right)}\text{加了第一棵树的预测值}\\ ~\\ \hat{y}_{i}^{\left( 2 \right)}=f_1\left( x_i \right) =\hat{y}_{i}^{\left( 0 \right)}+f_2\left( x_i \right) =\hat{y}_{i}^{\left( 1 \right)}+f_2\left( x_i \right) \\ ~\\ \cdots \\ ~\\ \hat{y}_{i}^{\left( t \right)}=\sum\limits_{k=1}^t{f_k\left( x_i \right)}=\hat{y}_{i}^{\left( t-1 \right)}+f_t\left( x_i \right) \ \ \ \ \ \ \ \ \ \ \ \ ps:\hat{y}_{i}^{\left( t \right)}\text{第}t\text{轮的模型预测\\\ }\hat{y}_{i}^{\left( t-1 \right)}\text{保留前}t-1\text{轮的模型预测\ }f_t\left( x_i \right) \text{加入第}t\text{棵树}\\ ~\\ \text{为防止模型的过拟合,我们引入一个惩罚函数:} \varOmega \left( f_t \right) =\gamma T+\frac{1}{2}\lambda \sum\limits_{j=1}^T{w_{j}^{2}}\\ ~\\ \text{其中}\gamma \text{为系数可以理解为惩罚力度,}T\text{表示叶子的个数,}w_j\text{表示每个叶子的权重值,}\frac{1}{2}\lambda \sum\limits_{j=1}^T{w_{j}^{2}}\text{为}L2\text{正则化项}\\ ~\\ ~\\ Xgboost\text{公式推导:}\\ ~\\ \text{为了在实际问题中使用该思想,我们需要为具体任务设定一个目标函数,并经过多次迭代得到最佳结果,假设我们的目标函数为:}\\ ~\\ Obj^{\left( t \right)}=\sum\limits_{i=1}^n{l\left( y_i,\hat{y}^{\left( t \right)} \right)}+\sum\limits_{i=1}^t{\Omega \left( f_i \right)}\\ ~\\ \text{我们知道}Xgboost\text{最核心思想是,每次我们选取决策树,都必须使得我们设定的目标函数尽可能大的降低,所以我们的目标函数进一步变成:}\\ ~\\ Obj^{\left( t \right)}=\sum\limits_{i=1}^n{l\left( y_i,\hat{y}^{\left( t-1 \right)}+f_t\left( x_i \right) \right)}+\sum\limits_{i=1}^t{\Omega \left( f_i \right)}\ +\ cons\tan t\ \ ps:f_t\left( x_i \right) \text{表示我们下一步将要选取的决策树,}cons\tan t\text{表示计算中的常数项}\\ ~\\ \text{此时,我们的目标就可以转换成:找到一个}f_t\text{用来优化上方的目标函数。}\\ ~\\\text{通过观察目标函数我们可以发现,在}l\left( y_i,\hat{y}^{\left( t-1 \right)}+f_t\left( x_i \right) \right) \text{中,我们可以将}y_i,\hat{y}^{\left( t-1 \right)}\text{看作}x\text{,将}f_t\left( x_i \right) \text{看作}\Delta x\text{,此时等式变成}l\left( x+\Delta x \right) \text{,}\\ ~\\ \text{由于我们需要得到最优解,我们很容易想到求导操作,进而想到使用泰勒公式展开。}\\ ~\\ \text{泰勒展开式为:}f\left( x+\Delta x \right) \simeq f\left( x \right) +f^{'}\left( x \right) \Delta x+\frac{1}{2}f^{''}\left( x \right) \Delta x^2\\ ~\\ \text{为了等式简单,我们定义:}\\ ~\\ g_i=\partial _{\hat{y}^{\left( t-1 \right)}}l\left( y_i,\hat{y}^{\left( t-1 \right)} \right) ,\ h_i=\partial _{\hat{y}^{\left( t-1 \right)}}^{2}l\left( y_i,\hat{y}^{\left( t-1 \right)} \right) \\ ~\\ Obj^{\left( t \right)}\simeq \sum\limits_{i=1}^n{\left[ l\left( y_i,\hat{y}^{\left( t-1 \right)} \right) +g_if_t\left( x_i \right) +\frac{1}{2}h_if_{t}^{2}\left( x_i \right) \right]}+\Omega \left( f_t \right) +\,\,cons\tan t\ \\ \text{由于,}l\left( y_i,\hat{y}^{\left( t-1 \right)} \right) \text{表示前}t-1\text{棵树的预测值,可以看作为常数值,故目标函数进一步化简为:}\\ ~\\ Obj^{\left( t \right)}\simeq \sum\limits_{i=1}^n{\left[ g_if_t\left( x_i \right) +\frac{1}{2}h_if_{t}^{2}\left( x_i \right) \right]}+\Omega \left( f_t \right) +\,\,cons\tan t\,\,\\ ~\\ \text{其中:}g_i=\partial _{\hat{y}^{\left( t-1 \right)}}l\left( y_i,\hat{y}^{\left( t-1 \right)} \right) ,\,\,h_i=\partial _{\hat{y}^{\left( t-1 \right)}}^{2}l\left( y_i,\hat{y}^{\left( t-1 \right)} \right) \\ ~\\ Obj^{\left( t \right)}\simeq \sum\limits_{i=1}^n{\left[ g_if_t\left( x_i \right) +\frac{1}{2}h_if_{t}^{2}\left( x_i \right) \right]}+\Omega \left( f_t \right) +\,\,cons\tan t\,\,\\ ~\\ ps\text{:由于常数项求导为0,故可以暂时将常数项不看,得到下式}\\ ~\\ \ \ \ \ \ =\sum\limits_{i=1}^n{\left[ g_if_t\left( x_i \right) +\frac{1}{2}h_if_{t}^{2}\left( x_i \right) \right]}+\Omega \left( f_t \right)\\ ~\\ ps\text{:把惩罚函数}\varOmega \left( f_t \right) =\gamma T+\frac{1}{2}\lambda \sum\limits_{j=1}^T{w_{j}^{2}}\text{代入得到下式}\\ ~\\ \ \ \ \ \ =\sum\limits_{i=1}^n{\left[ g_if_t\left( x_i \right) +\frac{1}{2}h_if_{t}^{2}\left( x_i \right) \right]}+\gamma T+\frac{1}{2}\lambda \sum\limits_{j=1}^T{w_{j}^{2}}\\ ~\\ ps\text{:第}t\text{棵树的}function\text{即}f_t\left( x_i \right) \text{,其实本质上就是权重参数,即}f_t\left( x_i \right) =w_{q\left( x_i \right)}\text{代入得到下式}\\ ~\\ \ \ \ \ \ =\sum\limits_{j=1}^n{\left[ g_iw_{q\left( x_i \right)}+\frac{1}{2}h_iw_{q\left( x_i \right)}^{2} \right]}+\gamma T+\frac{1}{2}\lambda \sum\limits_{j=1}^T{w_{j}^{2}}\\ ~\\ ps\text{:}n\text{表示样本个数,用}\sum\limits_i^n{\text{表示逐样本遍历}}\text{,}T\text{表示叶子节点个数,用}\sum\limits_{j=1}^T{\text{表示逐叶子姐节点遍历}}\text{,用}\sum\limits_{i\in I_j}^{}{}\text{表示每个叶子节点中的样本个数,因此得到下式}\\ ~\\ \ \ \ \ \ =\sum\limits_{j=1}^T{\left[ \left( \sum\limits_{i\in I_j}^{}{g_i} \right) w_j+\frac{1}{2}\left( \sum\limits_{i\in I_j}^{}{h_i} \right) w_{j}^{2} \right]}+\gamma T+\frac{1}{2}\lambda \sum\limits_{j=1}^T{w_{j}^{2}}\\ ~\\ ps:w_{q\left( x_i \right)}\ \text{表示单个样本的权重,}w_j\text{表示叶子结点的权重}\\ ~\\ \text{前后合并得到:}\\ ~\\ \ \ \ \ \ =\sum\limits_{j=1}^T{\left[ \left( \sum\limits_{i\in I_j}^{}{g_i} \right) w_j+\frac{1}{2}\left( \sum\limits_{i\in I_j}^{}{h_i}+\lambda \right) w_{j}^{2} \right]}+\gamma T\\ ~\\ \text{为了进一步化简目标函数,我们令:}\\ ~\\ G_j=\sum\limits_{i\in I_j}^{}{g_i},\ H_j=\sum\limits_{i\in I_j}^{}{h_i}\\ ~\\ ps\text{:}G_j\text{表示所有样本一阶导的累加和,}H_j\text{示所有样本二阶导的累加和,带入目标函数得}\\ ~\\ Obj^{\left( t \right)}=\sum\limits_{j=1}^T{\left[ G_jw_j+\frac{1}{2}\left( H_j+\lambda \right) w_{j}^{2} \right]}+\gamma T\\ ~\\ \text{回顾我们的任务,找到目标函数的最优解,我们对}f_t\left( w_j \right) =G_jw_j+\frac{1}{2}\left( H_j+\lambda \right) w_{j}^{2}\text{求一阶导得:}\\ ~\\ \frac{\partial J\left( f_t \right)}{\partial w_j}=G_j+\left( H_j+\lambda \right) w_j=0\\ ~\\ \text{解得:}w_j=-\frac{G_j}{H_j+\lambda}\text{,带入目标函数为:}\\ ~\\ Obj=-\frac{1}{2}\sum\limits_{j=1}^T{\frac{G_{j}^{2}}{H_j+\lambda}+}\gamma T\\ \\. Xgboost解决问题的核心思路:  在使用决策树解决一些实际问题时,在创建第一棵树时,能够得到的效果不一定能够达到任务的要求, 所以我们需要创建多棵树,来共同解决问题,得到理想的效果,所以Xgboost的最核心的要求就是, 在添加每一棵决策树时,最后的结果都必须有一定的提升,故Xgboost是个提升模型。 用表达式来表示为: y^i(0)=0 y^i(1)=f1(xi)=y^i(0)+f1(xi)                      ps:f1(xi)表示第一棵树的function  y^i(1)加了第一棵树的预测值 y^i(2)=f1(xi)=y^i(0)+f2(xi)=y^i(1)+f2(xi)  y^i(t)=k=1tfk(xi)=y^i(t1)+ft(xi)            ps:y^i(t)t轮的模型预测 y^i(t1)保留前t1轮的模型预测 ft(xi)加入第t棵树 为防止模型的过拟合,我们引入一个惩罚函数:Ω(ft)=γT+21λj=1Twj2 其中γ为系数可以理解为惩罚力度,T表示叶子的个数,wj表示每个叶子的权重值,21λj=1Twj2L2正则化项  Xgboost公式推导: 为了在实际问题中使用该思想,我们需要为具体任务设定一个目标函数,并经过多次迭代得到最佳结果,假设我们的目标函数为: Obj(t)=i=1nl(yi,y^(t))+i=1tΩ(fi) 我们知道Xgboost最核心思想是,每次我们选取决策树,都必须使得我们设定的目标函数尽可能大的降低,所以我们的目标函数进一步变成: Obj(t)=i=1nl(yi,y^(t1)+ft(xi))+i=1tΩ(fi) + constant  ps:ft(xi)表示我们下一步将要选取的决策树,constant表示计算中的常数项 此时,我们的目标就可以转换成:找到一个ft用来优化上方的目标函数。 通过观察目标函数我们可以发现,在l(yi,y^(t1)+ft(xi))中,我们可以将yi,y^(t1)看作x,将ft(xi)看作Δx,此时等式变成l(x+Δx) 由于我们需要得到最优解,我们很容易想到求导操作,进而想到使用泰勒公式展开。 泰勒展开式为:f(x+Δx)f(x)+f(x)Δx+21f′′(x)Δx2 为了等式简单,我们定义: gi=y^(t1)l(yi,y^(t1)), hi=y^(t1)2l(yi,y^(t1)) Obj(t)i=1n[l(yi,y^(t1))+gift(xi)+21hift2(xi)]+Ω(ft)+constant 由于,l(yi,y^(t1))表示前t1棵树的预测值,可以看作为常数值,故目标函数进一步化简为: Obj(t)i=1n[gift(xi)+21hift2(xi)]+Ω(ft)+constant 其中:gi=y^(t1)l(yi,y^(t1)),hi=y^(t1)2l(yi,y^(t1)) Obj(t)i=1n[gift(xi)+21hift2(xi)]+Ω(ft)+constant ps:由于常数项求导为0,故可以暂时将常数项不看,得到下式      =i=1n[gift(xi)+21hift2(xi)]+Ω(ft) ps:把惩罚函数Ω(ft)=γT+21λj=1Twj2代入得到下式      =i=1n[gift(xi)+21hift2(xi)]+γT+21λj=1Twj2 ps:第t棵树的functionft(xi),其实本质上就是权重参数,即ft(xi)=wq(xi)代入得到下式      =j=1n[giwq(xi)+21hiwq(xi)2]+γT+21λj=1Twj2 psn表示样本个数,用in表示逐样本遍历T表示叶子节点个数,用j=1T表示逐叶子姐节点遍历,用iIj表示每个叶子节点中的样本个数,因此得到下式      =j=1T[(iIjgi)wj+21(iIjhi)wj2]+γT+21λj=1Twj2 ps:wq(xi) 表示单个样本的权重,wj表示叶子结点的权重 前后合并得到:      =j=1T[(iIjgi)wj+21(iIjhi+λ)wj2]+γT 为了进一步化简目标函数,我们令: Gj=iIjgi, Hj=iIjhi psGj表示所有样本一阶导的累加和,Hj示所有样本二阶导的累加和,带入目标函数得 Obj(t)=j=1T[Gjwj+21(Hj+λ)wj2]+γT 回顾我们的任务,找到目标函数的最优解,我们对ft(wj)=Gjwj+21(Hj+λ)wj2求一阶导得: wjJ(ft)=Gj+(Hj+λ)wj=0 解得:wj=Hj+λGj,带入目标函数为: Obj=21j=1THj+λGj2+γT.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值