機器學習 LightGBM

2021-09-05 12:53:55 字數 3151 閱讀 9063

lightgbm(light gradient boosting machine)是乙個基於決策樹演算法的快速的、分布式的、高效能 gradient boosting(gbdt、gbrt、gbm 或 mart)框架,可被用於排行、分類以及其他許多機器學習任務中。

gbdt 雖然是個強力的模型,但卻有著乙個致命的缺陷,不能用類似 mini batch 的方式來訓練,需要對資料進行無數次的遍歷。如果想要速度,就需要把資料都預載入在記憶體中,但這樣資料就會受限於記憶體的大小;如果想要訓練更多的資料,就要使用外存版本的決策樹演算法。雖然外存演算法也有較多優化,ssd 也在普及,但在頻繁的 io 下,速度還是比較慢的。為了能讓 gbdt 高效地用上更多的資料,我們把思路轉向了分布式 gbdt, 然後就有了 lightgbm。

histogram 演算法,則只需要(#data* #features * 1bytes)的記憶體消耗,僅為pre-sorted演算法的1/8。因為 histogram 演算法僅需要儲存 featurebin value (離散化後的數值),不需要原始的 feature value,也不用排序,而 bin value 用 uint8_t (256bins) 的型別一般也就足夠了。

histogram 做差加速。乙個容易觀察到的現象:乙個葉子的直方圖可以由它的父親節點的直方圖與它兄弟的直方圖做差得到。通常構造直方圖,需要遍歷該葉子上的所有資料,但直方圖做差僅需遍歷直方圖的 k 個桶。利用這個方法,lightgbm 可以在構造乙個葉子的直方圖後,可以用非常微小的代價得到它兄弟葉子的直方圖,在速度上可以提公升一倍。

xgboost中採用**預排序(pre-sorted)**的方法,計算過程當中是按照value的排序,逐個資料樣本來計算劃分收益,這樣的演算法能夠精確的找到最佳劃分值

pre-sorted 演算法需要的記憶體約是訓練資料的兩倍(2* #data* #features* 4bytes),它需要用32位浮點來儲存 feature value,並且對每一列特徵,都需要乙個額外的排好序的索引,這也需要32位的儲存空間

leaf-wise則是一種更為高效的策略,每次從當前所有葉子中,找到**增益最大(一般也是資料量最大)的乙個葉子,然後**,如此迴圈。因此同 level-wise 相比,在**次數相同的情況下,leaf-wise 可以降低更多的誤差,得到更好的精度。leaf-wise 的缺點是可能會長出比較深的決策樹,產生過擬合。因此 lightgbm 在leaf-wise 之上增加了乙個最大深度的限制,在保證高效率的同時防止過擬合。

(level-wise) 的決策樹生長策略,而使用了帶有深度限制的按葉子生長 (leaf-wise) 演算法。 level-wise 過一次資料可以同時**同一層的葉子,容易進行多執行緒優化,不容易過擬合。但實際上level-wise是一種低效的演算法,因為它不加區分的對待同一層的葉子,帶來了很多沒必要的開銷。因為實際上很多葉子的**增益較低,沒必要進行搜尋和**。

兩者的優缺點

gbdt 雖然是個強力的模型,但卻有著乙個致命的缺陷,不能用類似 mini batch 的方式來訓練,需要對資料進行無數次的遍歷。如果想要速度,就需要把資料都預載入在記憶體中,但這樣資料就會受限於記憶體的大小;如果想要訓練更多的資料,就要使用外存版本的決策樹演算法。雖然外存演算法也有較多優化,ssd 也在普及,但在頻繁的 io 下,速度還是比較慢的。

單個機器在不犧牲速度的情況下,盡可能多地用上更多的資料;

多機並行的時候,通訊的代價盡可能地低,並且在計算上可以做到線性加速。

基於這兩個需求,lightgbm 選擇了基於 histogram 的決策樹演算法。相比於另乙個主流的演算法 pre-sorted(如 xgboost 中的 exact 演算法),histogram 在記憶體消耗和計算代價上都有不少優勢。

預排序演算法中有兩個頻繁的操作會導致cache-miss,也就是快取消失(對速度的影響很大,特別是資料量很大的時候,順序訪問比隨機訪問的速度快4倍以上 )。

對梯度的訪問:在計算增益的時候需要利用梯度,對於不同的特徵,訪問梯度的順序是不一樣的,並且是隨機的

對於索引表的訪問:預排序演算法使用了行號和葉子節點號的索引表,防止資料切分的時候對所有的特徵進行切分。同訪問梯度一樣,所有的特徵都要通過訪問這個索引表來索引。

這兩個操作都是隨機的訪問,會給系統效能帶來非常大的下降。

lightgbm使用的直方圖演算法能很好的解決這類問題。首先。對梯度的訪問,因為不用對特徵進行排序,同時,所有的特徵都用同樣的方式來訪問,所以只需要對梯度訪問的順序進行重新排序,所有的特徵都能連續的訪問梯度。並且直方圖演算法不需要把資料id到葉子節點號上(不需要這個索引表,沒有這個快取消失問題)

傳統的機器學習一般不能支援直接輸入類別特徵,需要先轉化成多維的0-1特徵,這樣無論在空間上還是時間上效率都不高。lightgbm通過更改決策樹演算法的決策規則,直接原生支援類別特徵,不需要轉化,提高了近8倍的速度。

catboost 演算法的設計初衷是為了更好的處理 gbdt 特徵中的 categorical features 。

在處理 gbdt 特徵中的 categorical features 的時候,最簡單的方法是用 categorical feature 對應的標籤的平均值來替換。在決策樹中,標籤平均值將作為節點**的標準。這種方法被稱為 greedy target-based statistics , 簡稱 greedy tbs,這種方法有乙個顯而易見的缺陷,就是通常特徵比標籤包含更多的資訊,如果強行用標籤的平均值來表示特徵的話,當訓練資料集和測試資料集資料結構和分布不一樣的時候會出問題(條件偏移問題)。

乙個標準的改進 greedy tbs的方式是新增先驗分布項,這樣可以減少雜訊和低頻率資料對於資料分布的影響:

x ^k

i=∑j

=1nπ

⋅yj+

ap∑j

=1nπ

+a\hat x_k^i = \frac^n\pi\\cdot y_j + ap }^n\pi\+ a}

x^ki​=

∑j=1

n​π+

a∑j=

1n​π

⋅yj​

+ap​

機器學習 lightgbm

lightgbm是微軟推出的一款boosting框架,相對於傳統的xgboost有以下優點 更快的訓練效率 低記憶體使用 更好的準確率 支援並行學習 可處理大規模資料 它摒棄了現在大部分gbdt使用的按層生長 level wise 的決策樹生長策略,使用帶有深度限制的按葉子生長 leaf wise ...

機器學習演算法 整合學習 lightGBM

lightgbm 是整合學習的一種,是梯度提公升決策樹的高效實現。主要有幾方面優化 機器學習 lightgbm a highly efficient gradient boosting decision tree lightgbm 特性 features lightgbm 直方圖演算法用於搜尋特徵的...

LightGBM演算法梳理

leaf wise vs level wise 特徵並行和資料並行 順序訪問梯度 直接支援類別特徵 調參 參考資料 lightgbm包含兩個關鍵點 1 light,輕量級 2 gbm,梯度提公升機。lightgbm是乙個梯度boosting框架,使用基於學習演算法的決策樹。具有以下特點 它是針對xg...