
下面统一以特征为 【1,2,3,4,5,6,7,8,9,10】为例
1、exact 精确贪心模式,仅xgb实现,lgb无,遍历特征的每一个分裂间隔以得到最优的局部切分点;
在1-2,2-3,3-4,4-5。。。。9-10之间分别进行尝试分裂计算分裂增益选择最大分裂增益处进行分裂
2、基于直方图的近似算法 approx,仅xgb实现:
就是简单的分位数方法,默认参数是:sketch_eps=0.03,也就是1/0.03=33,分33箱,是哦那个的是等距分箱,因为是用的分位数。。。为了简单起见我们设置sketch_eps=0.5,则分为两箱,恰好取到1/2即中位数(5+6)/2=5.5,则【1,2,3,4,5,6,7,8,9,10】转化为【1,1,1,1,1,2,2,2,2,2】,此时只能分为1和2了,这就是直方图近似算法。
需要注意的是:

approx有两种方式,global和local,global的思路和lightgbm一样,一次分箱,重复使用;而local则是选择每次分裂都重新进行分位数分箱,也可以称为我们熟悉的等距分箱。
实验中发现,全局k分位点取20和局部k分位点取3,得到了近似的效果。
直观参考下图

3、快速直方图算法,

直接使用了lightgbm的思路,不过很有意思的是:

我们使用lgb的直方图算法运行xgb的时候,grow_policy可以使用depthwise的方案(也就是我们熟知的level-wise),而不像lgb一样使用的是lossguide的方式(也就是我们数值的leaf-wise),xgb获得hist提速的同时保持level-wise,depthwise的方案相对于lossguide的方案更快,因为生成的leafs 叶子节点相同的情况下,level-wise只需要传递更少的数据。
4、weight quantile sketch

中文名加权分位数法,和上面介绍的approx直接使用等距分箱这种简单的思路不同,加权分位数法是从loss的层面来进行分箱的:

这一张图就可以看明白了,不再是根据样本的值而是根据样本的二阶梯度进行分箱,然后再exact分裂。
















