天天看點

GBDT、XGBoost、LightGBM的差別和聯系

一、Boosting算法

首先這三種算法都屬于Boosting方法,且GBDT是機器學習算法,XGBoost和LightGBM是GBDT的算法實作。

Boosting方法訓練基分類器時采用串行的方式,各個基分類器之間

有依賴。其基本思想是根據目前模型損失函數的負梯度資訊來訓練新加入的弱分類器,然後将訓練好的弱分類器以累加的形式結合到現有模型中。這個過程是在不斷地減小損失函數,使得模型偏差不斷降低。但Boosting的過程并不會顯著降低方差。這是因為Boosting的訓練過程使得各弱分類器之間是強相關的,缺乏獨立性,是以并不會對降低方差有作用。

二、XGBoost和GBDT的算法比較

1)GBDT是機器學習算法,XGBoost是該算法的工程實作。

2)在使用CART作為基分類器時,XGBoost顯式地加入了正則項來控制模型的複雜度,有利于防止過拟合,進而提高模型的泛化能力。

3)GBDT在模型訓練時隻使用了代價函數的一階導數資訊,XGBoost對代價函數進行二階泰勒展開,可以同時使用一階和二階導數。

4)傳統的GBDT采用CART作為基分類器,XGBoost支援多種類型的基分類器,比如線性分類器。

5)傳統的GBDT在每輪疊代時使用全部的資料,XGBoost則采用了與随機森林相似的政策,支援對資料進行采樣,支援列抽樣,不僅能降低過拟合,還能減少計算,這也是xgboost異于傳統gbdt的一個特性。

6)傳統的GBDT沒有設計對缺失值進行處理,XGBoost可以自動學習出它的分裂方向。XGBoost對于确實值能預先學習一個預設的分裂方向。

7)Shrinkage(縮減),相當于學習速率(xgboost中的eta)。xgboost在進行完一次疊代後,會将葉子節點的權重乘上該系數,主要是為了削弱每棵樹的影響,讓後面有更大的學習空間。實際應用中,一般把eta設定得小一點,然後疊代次數設定得大一點。(補充:傳統GBDT的實作也有學習速率)

三、LightGBM和XGBoost的算法比較

LightGBM是XGBoost的改進版,相比于前者,它添加了很多新的方法來改進模型,包括:并行方案、基于梯度的單邊檢測、排他性特征捆綁等。

1)XGBoost使用基于預排序的決策樹算法,每周遊一個特征就需要計算一次特征的增益,時間複雜度為O(datafeature)。

而LightGBM使用基于直方圖的決策樹算法,直方圖的優化算法隻需要計算K次,時間複雜度為O(Kfeature)

2)XGBoost使用按層生長(level-wise)的決策樹生長政策,LightGBM則采用帶有深度限制的按葉子節點(leaf-wise)算法。在分裂次數相同的情況下,leaf-wise可以降低更多的誤差,得到更好的精度。leaf-wise的缺點在于會産生較深的決策樹,産生過拟合。

3)支援類别特征,不需要進行獨熱編碼處理

4)優化了特征并行和資料并行算法,除此之外還添加了投票并行方案

5)采用基于梯度的單邊采樣來保持資料分布,減少模型因資料分布發生變化而造成的模型精度下降

6)特征捆綁轉化為圖着色問題,減少特征數量

繼續閱讀