提升和裝袋樹(XGBoost,LightGBM)
有許多博客文章、YouTube 視頻等關於裝袋 或 提升樹木的想法。我的一般理解是每個的偽代碼是:
裝袋:
- 取 x% 的樣本和 y% 的特徵的 N 個隨機樣本
- 在 N 中的每一個上擬合您的模型(例如,決策樹)
- 預測每個 N
- 平均預測以獲得最終預測
提升:
- 使您的模型(例如,決策樹)適合您的數據
- 獲取殘差
- 使您的模型適合殘差
- 轉到 2 進行 N 次增強輪次
- 最終預測是順序預測變量的加權和。
我將對上面的理解進行任何澄清,但我的預期問題如下:
XGBoost 和 LightGBM 都有允許裝袋的參數。該應用程序不是 Bagging OR Boosting(每篇博文都在談論),而是 Bagging AND Boosting。什麼是組合 bagging 和 boosting 發生的地點和時間的偽代碼?
我希望它是“Bagged Boosted Trees”,但它似乎是“Boosted Bagged Trees”。差異似乎很大。
袋裝增強樹:
- 取 x% 的樣本和 y% 的特徵的 N 個隨機樣本
- 在 N 個樣本中的每一個上擬合 Boosted 樹
- 預測每個 N
- 平均預測以獲得最終預測
這似乎是最好的方法。畢竟,boosting 的風險是過擬合,而 bagging 的主要好處是減少過擬合;打包一堆增強模型似乎是個好主意。
然而,通過查看,例如,
scikit-learn
gradient_boosting.py(它進行樣本裝袋,但不是隨機特徵選擇),並在有關 LightGBM 和 XGBoost 的帖子中拼湊一些小塊,看起來 XGBoost 和 LightGBM 的工作方式如下:提升袋裝樹:
- 使決策樹適合您的數據
- 對於 N 個增強輪中的 i:
獲取殘差
如果我 mod bag_frequency == 0(即,每 5 輪裝袋):
- 取 x% 的樣本和 y% 的特徵的單個隨機樣本;繼續使用這個隨機樣本
將樹擬合到殘差
- 最終預測是順序預測變量的加權和。
請在此處更正我的理解並填寫詳細信息。Boosted Bagged Tree(每個 bag_frequency 只有 1 個隨機樹)似乎沒有 Bagged Boosted Tree 強大。
Bagging:隨機抽取 N 個樣本,其中 x% 的樣本和 y% 的特徵
在Bagging中重複對實例進行二次抽樣,但對特徵不進行二次抽樣。(RandomForests,XGBoost和CatBoost兩者都做):
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(如您所說)當然是一種合理的方法,但與XGBoost或CatBoost不同:
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
XGBoost和CatBoost都是基於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 輪裝袋):
這不應該在您的偽代碼中提及。尤其是當還有其他更重要的參數被遺漏時(例如提升中的學習率)。