从xgboost, lightgbm 到catboost

CSDN

xgboost

目标函数

O b j t = ∑ j = 1 T ( G j w j + 1 2 ( H j + λ ) w j 2 ) Obj^t= \sum_{j=1}^T(G_jw_j + \frac12(H_j+\lambda)w_j^2) Objt=j=1T(Gjwj+21(Hj+λ)wj2)

对于每个叶子节点,由最值公式可知:
w j ∗ = − G j H j + λ w_j^* = -\frac{G_j}{H_j+\lambda} wj=Hj+λGj
目标函数变为
O b j t = − 1 2 ∑ j = 1 T G j 2 H j + λ + γ T Obj^t = -\frac12\sum_{j=1}^T \frac{G_j^2}{H_j+ \lambda} + \gamma T Objt=21j=1THj+λGj2+γT

这个值越小越好

最优切分点划分算法

在实际训练过程中,当建立第 棵树时,一个非常关键的问题是如何找到叶子节点的最优切分点,XGBoost支持两种分裂节点的方法——贪心算法和近似算法。

(1)贪心算法

从树的深度为0开始:

  1. 对每个叶节点枚举所有的可用特征;
  2. 针对每个特征,把属于该节点的训练样本根据该特征值进行升序排列,通过线性扫描的方式来决定该特征的最佳分裂点,并记录该特征的分裂收益;
  3. 选择收益最大的特征作为分裂特征,用该特征的最佳分裂点作为分裂位置,在该节点上分裂出左右两个新的叶节点,并为每个新节点关联对应的样本集;
  4. 回到第1步,递归执行直到满足特定条件为止;

那么如何计算每个特征的分裂收益呢?
假设在某一节点完成分裂,则分裂前的目标函数可写为:
O b j 1 = − 1 2 [ ( G L + G R ) 2 H L + H R + λ ] + γ Obj_1=-\frac12[\frac{(G_L+G_R)^2}{H_L+H_R+\lambda}] + \gamma Obj1=21[HL+HR+λ(GL+GR)2]+γ
分裂后的目标函数:
O b j 2 = − 1 2 [ G L 2 H L + λ + G R 2 H R + λ ] + 2 γ Obj_2 = -\frac12[\frac{G_L^2}{H_L+\lambda} +\frac{G_R^2}{H_R+\lambda}] + 2\gamma Obj2=21[HL+λGL2+HR+λGR2]+2γ
分裂后的收益

G a i n = O b j 1 − O b j 2 = 1 2 [ G L 2 H L + λ + G R 2 H R + λ − ( G L + G R ) 2 H L + H R + λ ] Gain = Obj_1-Obj_2 = \frac12[\frac{G_L^2}{H_L+\lambda} +\frac{G_R^2}{H_R+\lambda}-\frac{(G_L+G_R)^2}{H_L+H_R+\lambda}] Gain=Obj1Obj2=21[HL+λGL2+HR

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值