Cart

提升和裝袋樹(XGBoost,LightGBM)

  • October 18, 2018

有許多博客文章、YouTube 視頻等關於裝袋 提升樹木的想法。我的一般理解是每個的偽代碼是:

裝袋:

  1. 取 x% 的樣本和 y% 的特徵的 N 個隨機樣本
  2. 在 N 中的每一個上擬合您的模型(例如,決策樹)
  3. 預測每個 N
  4. 平均預測以獲得最終預測

提升:

  1. 使您的模型(例如,決策樹)適合您的數據
  2. 獲取殘差
  3. 使您的模型適合殘差
  4. 轉到 2 進行 N 次增強輪次
  5. 最終預測是順序預測變量的加權和。

我將對上面的理解進行任何澄清,但我的預期問題如下:

XGBoost 和 LightGBM 都有允許裝袋的參數。該應用程序不是 Bagging OR Boosting(每篇博文都在談論),而是 Bagging AND Boosting。什麼是組合 bagging 和 boosting 發生的地點和時間的偽代碼?

我希望它是“Bagged Boosted Trees”,但它似乎是“Boosted Bagged Trees”。差異似乎很大。

袋裝增強樹:

  1. 取 x% 的樣本和 y% 的特徵的 N 個隨機樣本
  2. 在 N 個樣本中的每一個上擬合 Boosted 樹
  3. 預測每個 N
  4. 平均預測以獲得最終預測

這似乎是最好的方法。畢竟,boosting 的風險是過擬合,而 bagging 的主要好處是減少過擬合;打包一堆增強模型似乎是個好主意。

然而,通過查看,例如,scikit-learn gradient_boosting.py(它進行樣本裝袋,但不是隨機特徵選擇),並在有關 LightGBM 和 XGBoost 的帖子中拼湊一些小塊,看起來 XGBoost 和 LightGBM 的工作方式如下:

提升袋裝樹:

  1. 使決策樹適合您的數據
  2. 對於 N 個增強輪中的 i:
  • 獲取殘差

  • 如果我 mod bag_frequency == 0(即,每 5 輪裝袋):

    • 取 x% 的樣本和 y% 的特徵的單個隨機樣本;繼續使用這個隨機樣本
  • 將樹擬合到殘差

  1. 最終預測是順序預測變量的加權和。

請在此處更正我的理解並填寫詳細信息。Boosted Bagged Tree(每個 bag_frequency 只有 1 個隨機樹)似乎沒有 Bagged Boosted Tree 強大。

Bagging:隨機抽取 N 個樣本,其中 x% 的樣本和 y% 的特徵

在Bagging中重複對實例進行二次抽樣,但對特徵不進行二次抽樣。(RandomForestsXGBoostCatBoost兩者都做):

Given dataset D of size N.
For m in n_models:
   Create new dataset D_i of size N by sampling with replacement from D.
   Train model on D_i (and then predict)
Combine predictions with equal weight 


在Boosting偽代碼中包含一個初始化步驟以消除冗餘:

Init data with equal weights (1/N).
For m in n_model:
   Train model on weighted data (and then predict)
   Update weights according to misclassification rate.
   Renormalize weights
Combine confidence weighted predictions


Bagged Boosted Trees(如您所說)當然是一種合理的方法,但與XGBoostCatBoost不同:

Given dataset D of size N.
For m in n_models:
   Create new dataset D_i of size N by sampling with replacement from D.
   (Insert Boosting pseudo code here (on D_i))
Combine predictions with equal weight 


XGBoostCatBoost都是基於Boosting並使用整個訓練數據。他們還通過在每次提升迭代中進行一次二次抽樣來實現裝袋:

Init data with equal weights (1/N).
For m in n_model:
   Train model on weighted bootstrap sample (and then predict)
   Update weights according to misclassification rate.
   Renormalize weights
Combine confidence weighted predictions

如果您想堅持“將模型擬合到殘差”,那麼這將等同於“將模型擬合到引導樣本中的數據殘差”。


進一步說明

正如您所建議的那樣,沒有“最好的方法”(沒有免費的午餐定理)。“Bagged Boosted Trees”在某些數據集上的表現可能優於 XGBoost。

抽取 x% 樣本的單個隨機樣本

這條線令人困惑。你從哪裡得到這個?

如果我 mod bag_frequency == 0(即,每 5 輪裝袋):

這不應該在您的偽代碼中提及。尤其是當還有其他更重要的參數被遺漏時(例如提升中的學習率)。

引用自:https://stats.stackexchange.com/questions/372634

comments powered by Disqus