GBDT進化->XGBoost & LightGBM簡記

大體來看,XGBoost 在原理方面的改進主要就是在損失函數(shù)上作文章。

  1. 一是在原損失函數(shù)的基礎上添加了正則化項產(chǎn)生了新的目標函數(shù),這類似于對每棵樹進行了剪枝并限制了葉結點上的分數(shù)來防止過擬合。
  2. 二是對目標函數(shù)進行二階泰勒展開,利用二階導信息來最小化目標函數(shù)。Gradient Boosting只利用了一階導信息,而 XGBoost 引入二階導的一大好處是可以推導出一種新的增益計算方法,事實證明采用新的增益計算方法在優(yōu)化目標函數(shù)上更加有效,精確度上也勝過傳統(tǒng)的 GBDT。

  • XGBoost 與 GBDT 區(qū)別:
  1. 傳統(tǒng) GBDT 在優(yōu)化時只用到一階導數(shù)信息,XGBoost 則對目標函數(shù)進行了二階泰勒展開,同時用到了一階和二階導數(shù)。另外 XGBoost 工具支持自定義損失函數(shù),只要函數(shù)可一階和二階求導。
  2. XGBoost 在損失函數(shù)中加入正則化項,用于控制模型的復雜度,防止過擬合,從而提高模型的泛化能力
  3. 傳統(tǒng) GBDT 采用的是均方誤差作為內(nèi)部分裂的增益計算指標(因為用的都是回歸樹),而 XGBoost 使用的是經(jīng)過優(yōu)化推導后的式子,即頂部鏈接文章中式(1.6)
  4. XGBoost 添加了對稀疏數(shù)據(jù)的支持,在計算分裂增益時不會考慮帶有缺失值的樣本,這樣就減少了時間開銷。在分裂點確定了之后,將帶有缺失值的樣本分別放在左子樹和右子樹,比較兩者分裂增益,選擇增益較大的那一邊作為默認分裂方向
  5. 傳統(tǒng) GBDT 在損失不再減少時會停止分裂,這是一種預剪枝的貪心策略,容易欠擬合。XGBoost采用的是后剪枝的策略,先分裂到指定的最大深度 (max_depth) 再進行剪枝。而且和一般的后剪枝不同, XGBoost 的后剪枝是不需要驗證集的。
  • 說了這么多 XGBoost 的優(yōu)點,其當然也有不完美之處,因為要在訓練之前先對每個特征進行預排序并將結果存儲起來,對于空間消耗較大。另外雖然相比傳統(tǒng)的 GBDT 速度是快了很多,但和后來的 LightGBM 比起來還是慢了不少

酷文章:快的不要不要的lightGBM

  • XGBoost 對比 LightGBM的不足:
  1. 每次迭代訓練時需要讀取整個數(shù)據(jù)集,耗時耗內(nèi)存;
  2. 使用Basic Exact Greedy Algorithm計算最佳分裂節(jié)點時需要預先將特征的取值進行排序,排序之后為了保存排序的結果,費時又費內(nèi)存;
  3. 計算分裂節(jié)點時需要遍歷每一個候選節(jié)點,然后計算分裂之后的信息增益,費時;
  4. 生成決策樹是level-wise級別的,也就是預先設置好樹的深度之后,每一顆樹都需要生長到設置的那個深度,這樣有些樹在某一次分裂之后效果甚至沒有提升但仍然會繼續(xù)劃分樹枝,然后再次劃分....之后就是無用功了,耗時。

為了避免上述XGB的缺陷,并且能夠在不損害準確率的條件下加快GBDT模型的訓練速度,lightGBM在傳統(tǒng)的GBDT算法上加了兩個技術:

  1. 單邊梯度采樣 Gradient-based One-Side Sampling (GOSS);
  2. 互斥稀疏特征綁定 Exclusive Feature Bundling (EFB)
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容