LightGBM模型引入和原理介紹

2021-08-26 12:07:32 字數 2444 閱讀 9450

如何減少資料量

常用的減少訓練資料量的方式是down sample。例如在[5]中,權重小於閾值的資料會被過濾掉,sgb在每一輪迭代中用隨機的子集訓練弱學習器;在[6]中,取樣率會在訓練過程中動態調整。但是,所有這些工作除了sgb外都是基於adaboost的,並且由於gbdt沒有資料例項的權重,所以不能直接運用到gbdt上。雖然sgb可以應用到gbdt,但是它這種做法對acc影響太大了。

如何減少特徵

類似的,為了減少特徵的數量,需要過濾若特徵[22, 23, 7, 24]。這通常用pca和projection pursuit來做。可是,這些方法高度依賴乙個假設,那就是特徵包含相當多的冗餘的資訊。而這個假設在實踐中通常不成立(因為通常特徵都被設計為具有獨特作用的,移除了哪個都可能對訓練的acc有影響)

關於稀疏的資料

現實應用中的大規模資料通常是相當稀疏的。使用pre-sorted algorithm的gbdt可以通過忽略值為0的特徵來降低訓練的開銷。而使用histogram-based algorithm的gbdt沒有針對稀疏資料的優化方案,因為histogram-based algorithm無論特徵值是否為0,都需要檢索特徵的bin值,所以它能夠有效地利用這種稀疏特性。

為了解決上面的這些問題,我們提出了兩個新的技術——goss和efb。

1.lightgbm是微軟2023年新提出的,比xgboost更強大、速度更快的模型,效能上有很大的提公升,與傳統演算法相比具有的優點:        *更快的訓練效率        

*低記憶體使用        

*更高的準確率        

*支援並行化學習        

*可處理大規模資料          

*原生支援類別特徵,不需要對類別特徵再進行0-1編碼這類的

2.lightgbm一大的特點是在傳統的gbdt基礎上引入了兩個 新技術和乙個改進:

(1)gradient-based one-side sampling(goss)技術是去掉了很大一部分梯度很小的資料,只使用剩下的去估計資訊增益,避免低梯度長尾部分的影響。由於梯度大的資料在計算資訊增益的時候更重要,所以goss在小很多的資料上仍然可以取得相當準確的估計值。

(2)exclusive feature bundling(efb)技術是指**互斥的特徵(i.e.,他們經常同時取值為0),以減少特徵的數量。但對互斥特徵尋找最佳的**方式是乙個np難問題,當時貪婪演算法可以取得相當好的近似率(因此可以在不顯著影響**點選擇的準確性的情況下,顯著地減少特徵數量)。

(3)在傳統gbdt演算法中,最耗時的步驟是找到最優劃分點,傳統方法是pre-sorted方式,其會在排好序的特徵值上列舉所有可能的特徵點,而lightgbm中會使用histogram演算法替換了傳統的pre-sorted。基本思想是先把連續的浮點特徵值離散化成k個整數,同時構造出圖8所示的乙個寬度為k的直方圖。最開始時將離散化後的值作為索引在直方圖中累積統計量,當遍歷完一次資料後,直方圖累積了離散化需要的統計量,之後進行節點**時,可以根據直方圖上的離散值,從這k個桶中找到最佳的劃分點,從而能更快的找到最優的分割點,而且因為直方圖演算法無需像pre-sorted那樣儲存預排序的結果,而只是儲存特徵離散過得數值,所以使用直方圖的方式可以減少對記憶體的消耗。

相比xgboost,其更強大的原因是:          

(1)histogram演算法替換了傳統的pre-sorted,某種意義上是犧牲了精度換取速度,直方圖作差構建葉子直方圖更有創造力(直方圖演算法的基本思想:先把連續的浮點特徵值離散化成k個整數,同時構造乙個寬度為k的直方圖。遍歷資料時,根據離散化後的值作為索引在直方圖中累積統計量,當遍歷一次資料後,直方圖累積了需要的統計量,然後根據直方圖的離散值,遍歷尋找最優的分割點[利於計算分割打分]。)。

(2)帶有深度限制的按葉子生長 (leaf-wise) 演算法代替了傳統的(level-wise) 決策樹生長策略,提公升精度,同時避免過擬合危險(不太深了)。        

(3)記憶體做了優化,記憶體中僅僅需要儲存直方圖數值,而不是之前的所有資料,另外如果直方圖比較小的時候,我們還可以使用儲存uint8的形式儲存來訓練資料。        

(4)額外的優化還有cache命中率優化、多執行緒優化。 lightgbm優越性:速度快,**清晰,占用記憶體小。lightgbm可以在更小的代價下控制**樹。有更好的快取利用,是帶有深度限制的按葉子生長的策略,使用了leaf-wise策略,每次從當前所有葉子中,找到**增益最大的乙個葉子,然後進行**,不斷的進行迴圈下去,而lead-wise(智慧型)演算法的缺點是可能生長出比較深的決策樹,導致過擬合問題,為了解決過擬合問題,我們會在lightgbm中會對leaf-wise之上增加乙個最大深度的限制,在保持高效率的同時防止過擬合。

LightGBM介紹 原理與實戰

官網鏈結 中文 鏈結 微軟官方介紹 先安裝cmake和gcc,安裝過的直接跳過前兩步 brew install cmake brew install gcc git clone recursive cd lightgbm 在cmake之前有一步新增環境變數 export cxx g 8 cc gcc...

MacOS編譯和安裝lightgbm

通過brew安裝cmake brew install cmake 安裝 gcc brew install gcc 當前版本是10.2.0 這樣之後brew會查詢最新的gcc版本進行安裝,安裝過程中要仔細觀察安裝的gcc版本,接下來會用到,很重要,如果沒注意安裝過程並且不小心關掉了終端的話可以到這個路...

lightGBM和XGBoost使用方法總結

在python語言中lightgbm提供了兩種呼叫方式,分為為原生的api和scikit learn api,兩種方式都可以完成訓練和驗證。當然原生的api更加靈活,看個人習慣來進行選擇。1.直接import lightgbm as lgt 和import xgboost as xgb 這種方式在做...