有许多博客文章、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 强大。