在LightGBM與XGBoost的相關資料裏,我發現很少有博客能把它們的重要區別完整羅列出來,要麼只介紹了GOSS、EFB,要麼只涉及到leaf-wise。所以在這裏我把這些資料整合起來,儘量用簡短的話語把LightGBM與XGBoost的重要區別敘述出來,內容包含了我自己的理解,不一定正確。
一、GOSS與EFB
傳統的XGBoost算法在特徵維度較高和數據量巨大的時候,仍然存在效率和可擴展性的問題。這是因爲在基模型分裂時,目標函數的表達式是這樣的
上面的式子中,與代表葉子節點的一階、二階梯度和,所以可以看到,對每一個特徵的每一個切分點,都要計算一遍上面的目標函數,而每一次計算都要遍歷所有數據(包括樣本、特徵),這個過程非常耗時。LightGBM利用GOSS(基於梯度的單邊採樣)和EFB(互斥特徵捆綁)改進了這一過程。
在AdaBoost中,樣本權重代表了樣本的重要程度,被分類錯誤的樣本的權重較高。LightGBM參考了這一想法,用樣本梯度來衡量樣本的重要程度。爲什麼樣本梯度能衡量樣本有多重要呢?邏輯是這樣的,如果一個樣本的梯度比較小,一般意味着它的訓練誤差小(GBDT用負梯度代替殘差就是這一原理),已經被學習的很好了,因此可以直接丟棄掉。
GOSS是這麼做的,首先根據樣本的梯度將樣本排序,保留TOP 個樣本作爲子集,再在剩下的的樣本里隨機選取的樣本作爲子集,爲了抵消對數據分佈的影響,將子集內的樣本權重乘以一個,將與合併作爲新的樣本集進行下一個基模型的訓練。
上述GOSS通過樣本採樣,一定程度上減小了運算次數,接下來的EFB通過特徵捆綁,進一步提高了模型運算速度。
EFB將多個稀疏特徵特徵捆綁成一個bundles,它是這麼做的。EFB首先構造一個圖,圖上的節點代表各個特徵,節點之間有邊,邊上的權重代表特徵之間的衝突,通過特徵在圖中的度來降序排序特徵,依次檢查每個特徵將它分配給具有小衝突的現有bundles(只分配具有小衝突的特徵)。這個算法的時間複雜度是,當特徵數量很大時,LightGBM會採用一種更高效的無圖排序,直接根據每個特徵的非零個數進行排序,這裏認爲每個特徵的非零個數越多,它與其他特徵的衝突也越多。
好了,現在如果找到了兩個可以合併的特徵,EFB如何將它們合併呢?我們知道,LightGBM是通過直方圖將連續特徵離散化的,如果特徵A的取值範圍是[0, 10),特徵B的取值範圍是[0, 20),可以給特徵B一個10的偏移量,讓它的取值範圍變成[10, 30),這樣將特徵A、B分別離散化後合併,它們就會分佈在不同的bins中。
二、Leaf-wise
這一點就是LightGBM與XGBoost的區別中老生常談的話題了,與XGBoost的level-wise不同,LightGBM採用了leaf-wise的分裂方式,看下面的兩幅圖就清楚了。
相比之下,leaf-wise更爲高效,只需要少量的分裂就能很大程度的降低損失函數。但同時,也需要控制深度防止過擬合。
三、處理類別特徵
對於類別特徵,一般需要轉化成多維的one-hot編碼特徵,這種做法降低了空間和時間的效率。還有很重要的一點是,決策樹在使用one-hot編碼分裂時,只能做到one vs many,但LightGBM使用了many vs many的切分方式。舉個栗子,如果一個特徵有A、B、C、D四個分類,XGBoost只能做到將A放一類,B、C、D放一類,而LightGBM能做到A、B一類,C、D一類。
LightGBM是這麼做的,它根據訓練目標的相關性對類別進行重排序,更具體的說,類別特徵可以認爲是已經離散化成bins的特徵,而LightGBM根據將各個bins重新排序,再選取最優切分點。
四、並行
LightGBM在並行方面也對XGBoost做了改進,包括特徵並行與數據並行兩方面。
特徵並行的傳統做法是,對數據列採樣,即不同的機器上保留不同的特徵子集,各個機器上的worker根據所分配的特徵子集尋找到局部的最優切分點(特徵、閾值),互相通信來從局部最佳切分點裏得到最佳切分點,擁有最佳切分點的worker執行切分操作,然後將切分結果傳送給其他的worker,其他的worker根據接收到的數據來進行下一次的切分數據。
LightGBM對此做出的改進是,讓每個機器保留整個完整的數據集(並不是經過列採樣的數據),這樣就不必在切分後傳輸切分結果數據,因爲每個機器已經持有完整的數據集,這是典型的空間換時間。
在數據並行方面,傳統的做法是,行採樣對數據進行橫向切分,worker使用分配到的局部數據構建局部的直方圖,合併局部直方圖得到全局的直方圖,對全局直方圖尋找最優切分點,然後進行切分。
不同於合併所有的局部直方圖獲得全局的直方圖,LightGBM通過Reduce Scatter方法來合併不同worker的無交叉的不同特徵的直方圖,這樣找到該直方圖的局部最優切分點,最後同步到全局最優切分點。
參考:
(1)LightGBM: A Highly Efficient Gradient Boosting Decision Tree 論文
(2)『 論文閱讀』LightGBM原理
(3)XGBoost、LightGBM的詳細對比介紹
(4)Lightgbm基本原理介紹
(5)LightGBM介紹及參數調優