xgb的grow policy(lgb就一種直接包含進去了)

下面統一以特徵為 【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了,這就是直方圖近似演算法。

需要注意的是:

xgb的grow policy(lgb就一種直接包含進去了)

approx有兩種方式,global和local,global的思路和lightgbm一樣,一次分箱,重複使用;而local則是選擇每次分裂都重新進行分位數分箱,也可以稱為我們熟悉的等距分箱。

實驗中發現,全域性k分位點取20和區域性k分位點取3,得到了近似的效果。

直觀參考下圖

xgb的grow policy(lgb就一種直接包含進去了)

3、快速直方圖演算法,

xgb的grow policy(lgb就一種直接包含進去了)

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

xgb的grow policy(lgb就一種直接包含進去了)

我們使用lgb的直方圖演算法執行xgb的時候,grow_policy可以使用depthwise的方案(也就是我們熟知的level-wise),而不像lgb一樣使用的是lossguide的方式(也就是我們數值的leaf-wise),xgb獲得hist提速的同時保持level-wise,depthwise的方案相對於lossguide的方案更快,因為生成的leafs 葉子節點相同的情況下,level-wise只需要傳遞更少的資料。

4、weight

quantile sketch

xgb的grow policy(lgb就一種直接包含進去了)

中文名加權分位數法,和上面介紹的approx直接使用等距分箱這種簡單的思路不同,加權分位數法是從loss的層面來進行分箱的:

xgb的grow policy(lgb就一種直接包含進去了)

這一張圖就可以看明白了,不再是根據樣本的值而是根據樣本的二階梯度進行分箱,然後再exact分裂。

詳細可見,有了lgb之後,這類近似演算法都不怎麼用了,所以簡單介紹一下就完事兒了,拜拜

原理不難,看一下就懂了。