有很多关于袋装 或 助树的想法的博客文章,YouTube视频等。我的一般理解是,每个的伪代码为:
套袋:
- 取N个随机样本,占样本的x%和特征的y%
- 在每个N上拟合您的模型(例如决策树)
- 预测每个N
- 对预测取平均以得出最终预测
提升:
- 使模型(例如决策树)适合您的数据
- 获取残差
- 使模型适合残差
- 进行2次N轮助推
- 最终预测是顺序预测变量的加权和。
我将对上面的理解进行任何澄清,但是我想要的问题如下:
XGBoost和LightGBM都具有允许打包的参数。该应用程序不是Bagging OR Boosting(每篇博客文章都在谈论),而是Bagging AND Boosting。在何时何地进行装袋和装袋的伪代码是什么?
我以为它是“袋装升压树”,但似乎是“升压袋装树”。差异似乎很大。
袋装助推树:
- 取N个随机样本,占样本的x%和特征的y%
- 在N个样本中的每个样本上拟合Boosted树
- 预测每个N
- 对预测取平均以得出最终预测
这似乎是最好的方法。毕竟,增加压力的风险是过度安装,装袋的主要好处是减少过度安装;打包一堆增强模型似乎是个好主意。
但是,通过浏览(例如,scikit-learn
gradient_boosting.py(用于示例装袋,但不选择随机特征)),并在有关LightGBM和XGBoost的帖子中整理一些小块,看起来XGBoost和LightGBM的工作方式如下:
增强袋装树:
- 使决策树适合您的数据
- 对于我在N轮助推中:
- 获取残差
- 如果我mod bag_frequency == 0(即每5轮装袋):
- 取一个随机样本,占样本的x%和特征的y%;继续使用此随机样本
- 使树适合残差
- 最终预测是顺序预测变量的加权和。
请在这里更正我的理解并填写详细信息。Boosted Bagged树(每个bag_frequency仅包含1个随机树)似乎不如Bagged Boosted Tree强大。