1. 程式人生 > >6. 整合學習(Ensemble Learning)演算法比較

6. 整合學習(Ensemble Learning)演算法比較

1. 整合學習(Ensemble Learning)原理

2. 整合學習(Ensemble Learning)Bagging

3. 整合學習(Ensemble Learning)隨機森林(Random Forest)

4. 整合學習(Ensemble Learning)Adaboost

5. 整合學習(Ensemble Learning)GBDT

6. 整合學習(Ensemble Learning)演算法比較

1. AdaBoost Vs GBDT

  • 相同
  1. AdaBoost和GBDT都是重複選擇一個表現一般的模型並且每次基於先前模型的表現進行調整。
  • 不同
  1. AdaBoost是通過提升錯分資料點的權重來定位模型的不足。
  2. BDT是通過擬合梯度的殘差來迭代的。
  3. GBDT是一個通用演算法,可以使用更多種類的目標函式。
  4. Adaboost一般用於分類,GBDT一般用於迴歸

2. GBDT Vs XGBOOST

  1. 基分類器的選擇:傳統GBDT以CART作為基分類器,XGBoost還支援線性分類器,這個時候XGBoost相當於帶L1和L2正則化項的邏輯斯蒂迴歸(分類問題)或者線性迴歸(迴歸問題)。
  2. 二階泰勒展開:傳統GBDT在優化時只用到一階導數資訊,XGBoost則對代價函式進行了二階泰勒展開,同時用到了一階和二階導數。順便提一下,XGBoost工具支援自定義損失函式,只要函式可一階和二階求導。
  3. XGBoost在目標函式里加入了正則項,用於控制模型的複雜度。
  4. 列抽樣(column subsampling):XGBoost借鑑了隨機森林的做法,支援列抽樣,不僅能降低過擬合,還能減少計算,這也是XGBoost異於傳統GBDT的一個特性。
  5. 缺失值處理:XGBoost考慮了訓練資料為稀疏值的情況,可以為缺失值或者指定的值指定分支的預設方向,這能大大提升演算法的效率,paper提到50倍。即對於特徵的值有缺失的樣本,XGBoost可以自動學習出它的分裂方向。
  6. XGBoost工具支援並行:Boosting不是一種序列的結構嗎?怎麼並行的?注意XGBoost的並行不是tree粒度的並行,XGBoost也是一次迭代完才能進行下一次迭代的(第次迭代的損失函式裡包含了前面次迭代的預測值)。XGBoost的並行是在特徵粒度上的。我們知道,決策樹的學習最耗時的一個步驟就是對特徵的值進行排序(因為要確定最佳分割點),XGBoost在訓練之前,預先對資料進行了排序,然後儲存為block(塊)結構,後面的迭代中重複地使用這個結構,大大減小計算量。這個block結構也使得並行成為了可能,在進行節點的分裂時,需要計算每個特徵的增益,最終選增益最大的那個特徵去做分裂,那麼各個特徵的增益計算就可以開多執行緒進行。

3. GBDT和lightGBM

  1. xgboost採用的是level-wise的分裂策略,而lightGBM採用了leaf-wise的策略,區別是xgboost對每一層所有節點做無差別分裂,可能有些節點的增益非常小,對結果影響不大,但是xgboost也進行了分裂,帶來了務必要的開銷。 leaf-wise的做法是在當前所有葉子節點中選擇分裂收益最大的節點進行分裂,如此遞迴進行,很明顯leaf-wise這種做法容易過擬合,因為容易陷入比較高的深度中,因此需要對最大深度做限制,從而避免過擬合。
  2. lightgbm使用了基於histogram的決策樹演算法,這一點不同與xgboost中的 exact 演算法,histogram演算法在記憶體和計算代價上都有不小優勢。直方圖演算法介紹https://blog.csdn.net/jasonwang_/article/details/80833001
  3. 直方圖做差加速:一個子節點的直方圖可以通過父節點的直方圖減去兄弟節點的直方圖得到,從而加速計算。

(歡迎轉載,轉載請註明出處。歡迎溝通交流: [email protected]