促进和袋装树木(XGBoost,LightGBM)


17

有很多关于袋装 树的想法的博客文章,YouTube视频等。我的一般理解是,每个的伪代码为:

套袋:

  1. 取N个随机样本,占样本的x%和特征的y%
  2. 在每个N上拟合您的模型(例如决策树)
  3. 预测每个N
  4. 对预测取平均以得出最终预测

提升:

  1. 使模型(例如决策树)适合您的数据
  2. 获取残差
  3. 使模型适合残差
  4. 进行2次N轮助推
  5. 最终预测是顺序预测变量的加权和。

我将对上面的理解进行任何澄清,但是我想要的问题如下:

XGBoost和LightGBM都具有允许打包的参数。该应用程序不是Bagging OR Boosting(每篇博客文章都在谈论),而是Bagging AND Boosting。在何时何地进行装袋和装袋的伪代码是什么?

我以为它是“袋装升压树”,但似乎是“升压袋装树”。差异似乎很大。

袋装助推树:

  1. 取N个随机样本,占样本的x%和特征的y%
  2. 在N个样本中的每个样本上拟合Boosted树
  3. 预测每个N
  4. 对预测取平均以得出最终预测

这似乎是最好的方法。毕竟,增加压力的风险是过度安装,装袋的主要好处是减少过度安装;打包一堆增强模型似乎是个好主意。

但是,通过浏览(例如,scikit-learn gradient_boosting.py(用于示例装袋,但不选择随机特征)),并在有关LightGBM和XGBoost的帖子中整理一些小块,看起来XGBoost和LightGBM的工作方式如下:

增强袋装树:

  1. 使决策树适合您的数据
  2. 对于我在N轮助推中:
    • 获取残差
    • 如果我mod bag_frequency == 0(即每5轮装袋):
      • 取一个随机样本,占样本的x%和特征的y%;继续使用此随机样本
    • 使树适合残差
  3. 最终预测是顺序预测变量的加权和。

请在这里更正我的理解并填写详细信息。Boosted Bagged树(每个bag_frequency仅包含1个随机树)似乎不如Bagged Boosted Tree强大。


2
+1是一个有趣且结构合理的问题。并欢迎来到该网站。
mkt-恢复莫妮卡

您需要“计算错误”来进行提升。做错了,会崩溃。重量对于增加营养至关重要。这不是原始的残留物。……我们并不是在讨论增强随机加速的必要性,尽管它可以加快速度。
EngrStudent-恢复莫妮卡

这是助推袋。您将获得一个具有平均输出的新森林,而不是每个系列步骤都需要一棵新树。Eugene Tuv和Kari Torkkola。 jmlr.org/papers/volume10/tuv09a/tuv09a.pdf
EngrStudent-恢复莫妮卡

套袋的提振器将使整个系列成片成片,并获得平均产量。它可能会参与一系列(增强的)合奏可能造成的过度拟合,并提供更可靠的输出,但是收益不会很大。
EngrStudent-恢复莫妮卡

Answers:


13

套袋:抽取N个随机样本,分别占样本的x%和特征的y%

实例在Bagging中重复进行子采样,但Feature中不重复。(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

袋装助推树(如您所说的)无疑是一种合理的方法,但不同于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

如果您要坚持“使模型适合残差”,那么这等效于“使模型适合引导样本中的数据残差”。


进一步说明

没有您建议的“ 最佳方法 ”(没有免费的午餐定理)。在某些数据集上,“袋装助推树”可能胜过XGBoost。

随机抽取x%的样本作为样本

这行令人困惑。你从哪里得到的?

如果我mod bag_frequency == 0(即每5轮装袋):

在您的伪代码中不应提及这一点。尤其是当还有其他更重要的参数被遗漏时(例如提高学习速度时)。


(+1)个好答案!需要说明的是:OP在陈述“ XGBoost和LightGBM都具有允许装袋的参数 ”时是否错误?
mkt-恢复莫妮卡

两者都允许套袋:bagging_fractionLightGBM子样本XGBoost。不确定,为什么我一直都提到CatBoost。但是他们在问题上的工作方式都是一样的。
Laksan Nathan

我的错误,我错过了您回答中提到的那行。您能解释一下“ 每个增强迭代中都进行一次二次采样 ”吗?您是说在每次增强迭代中都会提取许多子样本,将树拟合到每个子样本,然后根据装袋的树计算误分类率,最后更新权重?如果是这样,您能否在伪代码中阐明这一点?
mkt-恢复莫妮卡

绘制的子样本数量不多,只有一个:并非将模型拟合到所有加权实例,而是在引导样本上训练模型。
Laksan Nathan

关于“随机抽取x%的样本作为样本”;更好的方法是“对x%的行进行单个采样”。我从这里得到的。
乔纳森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.