LightGBM和XGBoost的區別?


首先聲明,LightGBM是針對大規模數據(樣本量多,特征多)時,對XGBoost算法進行了一些優化,使得速度有大幅度提高,但由於優化方法得當,而精度沒有減少很多或者變化不大,理論上還是一個以精度換速度的目的。如果數據量不大,那就對XGBoost沒有什么優勢了。

 

我認為有這幾點:

1.GOSS(Gradient-based One-Side Sampling),基於梯度的單側采樣,對訓練樣本的采樣。

如原始訓練數據100w,高梯度數據有1w,那么會計算 1w+隨機選擇b%*余下的99w數據,然后把后部分數據進行加倍(*(1-a)/b),基於這些數據來得到特征的切分點。

2.EFB(Exclusive Feature Bundling),排斥特征整合,通過對某些特征整合來降低特征數量。

上面兩點是在原論文中多次提到的,主要的不同。

參考原論文:https://papers.nips.cc/paper/6907-lightgbm-a-highly-efficient-gradient-boosting-decision-tree.pdf

其它的我認為還有兩點:

3.查找連續變量 切分點 的方法

XGBoost默認使用的是pre-sorted algorithm,即先將連續變量排序,然后從前向后計算每個切分點后的信息增益,這樣算法復雜度是#data*#feature。好像也可以支持使用histogram。

LightGBM使用的是histogram-based algorithms,即將連續值先bin成k箱,然后再求切分點,每次計算切分點的復雜度是#k*#feature,但這樣會有一些精度損失。但由於,a粗精度可以相當於正則化的效果,防止過擬合。b單棵樹的精度可能會差一些,但在gbdt框架下,總體的效果不一定差。c在gbdt中決策樹是弱模型,精度不高影響也不大。

4.樹的生長方式

XGBoost是level(depdh)-wise,即左右子樹都是一樣深的,要生長一塊生長,要停一塊停。

LightGBM是leaf-wise,即可能左右子樹是不一樣深的,即使左子樹已經比右子樹深很多,但只要左子樹的梯度划分仍然比右子樹占優,就繼續在左子樹進行划分。

5、對類別特征的支持

實際上大多數機器學習工具都無法直接支持類別特征,一般需要把類別特征,轉化到多維的0/1 特征,降低了空間和時間的效率。而類別特征的使用是在實踐中很常用的。基於這個考慮,LightGBM 優化了對類別特征的支持,可以直接輸入類別特征,不需要額外的0/1 展開。並在決策樹算法上增加了類別特征的決策規則。在 Expo 數據集上的實驗,相比0/1 展開的方法,訓練速度可以加速 8 倍,並且精度一致。據我們所知,LightGBM 是第一個直接支持類別特征的 GBDT 工具。
參考:https://blog.csdn.net/friyal/article/details/82756777

          lightGBM原理


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM