LightGBM提出兩種新方法:Gradient-based One-Side Sampling (GOSS) 和Exclusive Feature Bundling (EFB)(基於梯度的one-side采樣和互斥的特征捆綁)
Gradient-based One-Side Sampling
針對數量大,GOSS保留所有的梯度較大的實例,在梯度小的實例上使用隨機采樣。為了抵消對數據分布的影響,計算信息增益的時候,GOSS對小梯度的數據引入常量乘數。GOSS首先根據數據的梯度絕對值排序,選取top a個實例。然后在剩余的數據中隨機采樣b個實例。接着計算信息增益時為采樣出的小梯度數據乘以(1-a)/b,這樣算法就會更關注訓練不足的實例,而不會過多改變原數據集的分布。
在GOSS中,
- 首先根據數據的梯度將訓練降序排序。
- 保留top a個數據實例,作為數據子集A。
- 對於剩下的數據的實例,隨機采樣獲得大小為b的數據子集B。
- 最后我們通過以下方程估計信息增益:

此處GOSS通過較小的數據集估計信息增益
,將大大地減小計算量。更重要的是,理論表明GOSS不會丟失許多訓練精度。
Exclusive Feature Bundling
針對特征維度高,而高維的數據通常是稀疏的,能否設計一種無損地方法來減少特征的維度。特別的,稀疏特征空間中,許多特征是互斥的,例如他們從不同時為非零值。我們可以綁定互斥的特征為單一特征,通過仔細設計特征臊面算法,作者從特征捆綁中構建了與單個特征相同的特征直方圖。這種方式的間直方圖時間復雜度從O(#data * #feature)降到O(#data * #bundle),由於#bundle << # feature,我們能夠極大地加速GBDT的訓練過程而且損失精度。
有兩個問題:
- 怎么判定哪些特征應該綁在一起(build bundled)?
- 怎么把特征綁為一個(merge feature)?
bundle(什么樣的特征被綁定)?
算法:
- 建立一個圖,每個邊有權重,其權重和特征之間總體沖突相關。
- 按照降序排列圖中的度數來排序特征。
- 檢查每個排序之后的每個特征,這個特征綁定到使得沖突最小的綁定,或者建立一個新的綁定。
為了繼續提高效率,LightGBM提出了一個更加高效的無圖的排序策略:將特征按照非零值個數排序,這和使用圖節點的度排序相似,因為更多的非零值通常會導致沖突,新算法在之前算法基礎上改變了排序策略。

merging features(特征合並)
通過將互斥特征放在不同的箱中來構建bundle。這可以通過將偏移量添加到特征原始值中實現,例如,假設bundle中有兩個特征,原始特征A取值[0, 10],B取值[0, 20]。我們添加偏移量10到B中,因此B取值[10, 30]。通過這種做法,就可以安全地將A、B特征合並,使用一個取值[0, 30]的特征取代AB。算法見上圖算法4。
EFB算法能夠將許多互斥的特征變為低維稠密的特征,就能夠有效的避免不必要0值特征的計算。實際,通過用表記錄數據中的非零值,來忽略零值特征,達到優化基礎的直方圖算法。通過掃描表中的數據,建直方圖的時間復雜度將從O(#data)降到O(#non_zero_data)。
參考
LightGBM原理-LightGBM: A Highly Efficient Gradient Boosting Decision Tree
