LightGBM演算法梳理

2021-09-08 11:34:43 字數 3317 閱讀 8264

leaf-wise vs level-wise

特徵並行和資料並行

順序訪問梯度

直接支援類別特徵

**調參

參考資料

lightgbm包含兩個關鍵點:(1)light,輕量級;(2)gbm,梯度提公升機。

lightgbm是乙個梯度boosting框架,使用基於學習演算法的決策樹。具有以下特點:

它是針對xgboost 的不足而構建的演算法。上述同樣是xgboost的不足

xgboost演算法是基於預排序方法,這種構建決策樹的演算法基本思想是:

直方圖演算法的基本思想是先把連續的浮點特徵值離散化成k個整數,同時構造乙個寬度為k的直方圖,在遍歷資料的時候,根據離散化後的值作為索引在直方圖中累積統計量,當遍歷一次資料後,直方圖累計了需要的統計量,然後根據直方圖的離散值,遍歷尋找最優的分割點。

使用直方圖演算法有很多的優點。首先,最明顯的是記憶體損耗降低,不需要額外儲存預排序的結果,只需要保留特徵離散化後的值,而這個值一般用8位整型儲存就足夠了。

計算上的代價也大幅度降低,預排序演算法每遍歷乙個特徵值就需要計算一次**增益,而直方圖演算法只需要計算k次,時間複雜度從o(d

ata∗

feat

ures

)o(data*features)

o(data

∗fea

ture

s)優化到了o(k

∗fea

ture

s)o(k*features)

o(k∗fe

atur

es),k一般遠遠小於樣本數量data。

將連續值就行了離散化,假設資料集a的某個特徵的特徵值有(二叉樹):

1.21.3

2.22.3

3.13.3

預排序演算法要全部遍歷一遍,需要切分大約5次。進行離散化後,只需要切分2次,},}

當然特徵被離散化後,找到的並不是很精確的分割點,會對結果產生影響。但在不同的資料集上的結果表面,離散化的分割點對最終的精確度影響並不是很大,甚至有時候結果更好一點。

在boosting下,決策樹本來就是若模型,分割點的精確不太重要。同時,較粗的分割點也有正則化的效果,可以有效地防止過擬合。

絕大多數的gbdt工具使用按層生長的決策樹生長策略。level-wise過一次資料可以同時**同一層的葉子,容易進行多執行緒優化,也好控制模型複雜度,不容易過擬合。但實際上level-wise是一種低效的演算法,因為它不加區分的對待同一層的葉子,帶來了很多沒必要的開銷實際上很多葉子的**增益較低,沒必要進行搜尋和**。level-wise過程如下圖所示:

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

特徵並行的主要思想是:不同機器在不同的特徵集合上分別尋找最優的分割點,然後再機器間同步最優的分割點。

該方法不能有效地加速特徵選擇的效率,當資料量data很大時,該並行方法不能加快效率,最優的**結果需要在worker之間進行傳輸,需要消耗很多的傳輸資源以及傳輸時間。

沒有垂直切點資料集,每個worker都有全量的訓練資料。因此最優的特徵**結果不需要傳輸到其他worker中,只需要將最優特徵以及**點告訴其他worker,worker隨後再本地進行處理。處理過程如下:

1.每個worker在基於區域性的特徵集合找到最優**特徵。

2.worker間傳輸最優**資訊,並得到全域性最優**資訊。

3.每個worker基於全域性最優**資訊,在本地進行資料**。

在資料量很大的時候,順序訪問比隨機訪問的速度快4倍以上

預排序演算法中有兩個頻繁的操縱會導致cache-miss

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

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

大多數機器學習工具都無法直接支援類別特徵,一般需要把類別特徵,轉化到多維的0,1特徵(one-hot操作),降低了空間和時間的效率。類別特徵的使用時在實踐中很常用的,基於這個考慮,lightgbm優化了對類別特徵的支援,可以直接輸入類別特徵,不需要額外的one-hot操作

類別型資料,即離散特徵。我們需要對類別型資料做乙個one-hot,將類別型資料稀疏化。例如用鞋子品牌這一特徵維度對鞋子進行分類:耐克鞋,阿迪鞋,李寧鞋。你不能將他們編碼成(0,1,2),因為這樣你就已經不公平的定義了三者之間的距離,阿迪和耐克的距離是1,而李寧和耐克的距離是2,我們不能這樣貿然定義,不能做乙個莽夫。眾生平等,所以我們要一視同仁,採取one-encode編碼將三者轉換為(1,0,0),(0,1,0),(0,0,1)。讓距離的計算變得更加合理

lightgbm使用直方圖的方式去處理,max bin的預設值是256,對於類別型特徵值,每乙個類別放入乙個bin,當類別大於256時,會忽略那些很少出現的類別。在**的時候,算的是按「是否屬於某個類別」來劃分增益。實際效果就是類似於one-hot的編碼方式。

參考自動處理類別特徵

類別特徵

Task4 LightGBM演算法梳理

lightgbm介紹及引數調優 lightgbm 提公升機器演算法 理論 安裝方法 python lightgbm 中文文件 lightgbm 中文文件 github 下面這個 給出了xgboost和lightgbm之間更加細緻的效能對比,包括了樹的生長方式,lightgbm是直接去選擇獲得最大收益...

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

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

機器學習 LightGBM

lightgbm light gradient boosting machine 是乙個基於決策樹演算法的快速的 分布式的 高效能 gradient boosting gbdt gbrt gbm 或 mart 框架,可被用於排行 分類以及其他許多機器學習任務中。gbdt 雖然是個強力的模型,但卻有著...