【轉】LightGBM原理之論文詳解

LightGBM原理之論文詳解

提升樹是利用加模型與前向分佈算法實現學習的優化過程,它有一些高效實現,如XGBoost, pGBRT,GBDT等。其中GBDT採用負梯度作爲劃分的指標(信息增益),XGBoost則利用到二階導數。他們共同的不足是,計算信息增益需要掃描所有樣本,從而找到最優劃分點。在面對大量數據或者特徵維度很高時,他們的效率和擴展性很難使人滿意。微軟開源的LightGBM(基於GBDT的)則很好的解決這些問題,它主要包含兩個算法:

  1. GOSS(從減少樣本角度):排除大部分小梯度的樣本,僅用剩下的樣本計算信息增益。

  2. EFB(從減少特徵角度):捆綁互斥特徵,也就是他們很少同時取非零值(也就是用一個合成特徵代替)。

前言:

GBDT是基於決策樹的集成算法,採用前向分佈算法,在每次迭代中,都是通過負梯度擬合殘差,從而學習一顆決策樹,最耗時的步驟就是找最優劃分點。一種流行的方法就是預排序,核心是在已經排好序的特徵值上枚舉所有可能的特徵點。另一種改進則是直方圖算法,他把連續特徵值劃分到k個桶中取,劃分點則在這k個點中選取。k<<d,所以在內存消耗和訓練速度都更佳,且在實際的數據集上表明,離散化的分裂點對最終的精度影響並不大,甚至會好一些。原因在於決策樹本身就是一個弱學習器,採用Histogram算法會起到正則化的效果,有效地防止模型的過擬合。LightGBM也是基於直方圖的。

爲了減少訓練數據,最直接的方法就是欠採樣(down sample),比如說過濾掉權重低於閾值的樣本。SGB(隨機梯度下降)採用的是在每輪迭代中選取隨機子集進行訓練弱分類器,AdaBoost則採用的是動態調整採樣率。SGB可以應用到GBDT,但會影響精度,其他的則不能直接引入,因爲GBDT中沒有這種內在的權重。

爲了減少特徵,通常做的是PCA降維,但是這些方法都假設特徵是冗餘的,這並不一直正確。

一般大型數據集都是稀疏的,基於pre-sorted的GBDT可以通過忽略零值特徵,從而減少訓練代價。但是,基於histogram的則沒有針對稀疏特性的優化方案,它只是計算累加值,不管你是0還是非0。所以,利用稀疏性的GBDT是很必要的。

接下來就要細細說說這兩個算法。

GOSS

在AdaBoost中採用權重很好詮釋了樣本的重要性,GBDT沒有這種權重,但是我們注意到每個數據樣本的梯度可以被用來做採樣的信息。也就是,如果一個樣本的梯度小,那麼表明這個樣本已經訓練好了,它的訓練誤差很小了,我們可以丟棄這些數據。當然,改變數據分佈會造成模型的精度損失。GOSS則通過保存大梯度樣本,隨機選取小梯度樣本,併爲其彌補上一個常數權重。這樣,GOSS更關注訓練不足的樣本,同時也不會改變原始數據太多。

具體算法如下:

        

先根據梯度對樣本進行排序,選取 a * 100% 的top樣本,再從剩餘數據中隨機選取 b * 100% 的樣本,並乘以 的係數放大。

以前計算特徵j在d值點的信息增益是這樣的:

現在是這樣的:

通過證明,近似誤差很好,很貼近使用所有數據的模型。

這也解釋了LightGBM的 leaf-wise 生成策略。

Leaf-wise (Best-first) 的決策樹生長策略

大部分決策樹的學習算法通過 level(depth)-wise 策略生長樹,如下圖一樣:

LightGBM 通過 leaf-wise (best-first)[6] 策略來生長樹。它將選取具有最大 delta loss 的葉節點來生長。 當生長相同的 #leaf,leaf-wise 算法可以比 level-wise 算法減少更多的損失。

#data 較小的時候,leaf-wise 可能會造成過擬合。 所以,LightGBM 可以利用額外的參數 max_depth 來限制樹的深度並避免過擬合(樹的生長仍然通過 leaf-wise 策略)。

EFB

高維數據一般是稀疏的,可以設計一種損失最小的特徵減少方法。並且,在稀疏特徵空間中,許多特徵都是互斥的,也就是它們幾乎不同時取非0值。因此,我們可以安全的把這些互斥特徵綁到一起形成一個特徵,然後基於這些特徵束構建直方圖,這樣又可以加速了。

有兩個問題待解決,如何判斷哪些特徵該綁到一起,如何構建綁定。這是NP難的。

首先,轉換到圖着色問題。G=(V, E),把關聯矩陣G的每一行看成特徵,從而得到|V|個特徵,互斥束就圖中顏色相同的頂點。圖中點就是特徵,邊代表兩個特徵不互斥,也就是特徵之間的衝突。如果算法允許小的衝突,可以得到更小的特徵束數量,計算效率會更高。證明發現隨機污染一小部分特徵值,最多影響訓練精度 是所有束中衝突最大的。通過選取合適的,我們可以很好的在效率和精度之間尋找平衡。

最後,排序就按照束的度來進行。當然,更一步優化是不夠造圖,直接根據非零值的數量排序,這個根據度排序很像,因爲更多非0值意味着更高概率的衝突。更改了排序策略,可以避免重複。

第二個問題,合併特徵,從而降低訓練複雜度,關鍵是我們可以確保原先特徵值可以從特徵束中識別出來。因爲直方圖存儲的是特徵的離散桶,而不是連續值,我們可以通過把互斥特徵放到不同桶,從而構造一個特徵束。這可以通過添加偏移實現。如,假設我們有2個特徵在一個特徵束中,原先特徵A的範圍爲[0,10),特徵B的範圍爲[0,20),我們給特徵B加上一個偏移10,它就變成[10,30),這樣我們就可以執行安全的合併了,用特徵束[0,30)代替特徵A和B。具體算法如下。

EFB算法可以把很多特徵綁到一起,形成更少的稠密特徵束,這樣可以避免對0特徵值的無用的計算。加速計算直方圖還可以用一個表記錄數據的非0值。

這樣,LightGBM的論文基本講解結束。

其他具體特性(並行,類別特徵處理等)詳情見:

http://lightgbm.apachecn.org/cn/latest/Features.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章