机器学习中的 Bagging、boosting 和 stacking

机器算法验证 机器学习 助推 集成学习 装袋 模型平均
2022-02-01 10:43:43

这3种方法的异同是什么:

  • 装袋,
  • 提升,
  • 堆叠?

哪个是最好的?为什么?

你能给我一个例子吗?

4个回答

这三者都是所谓的“元算法”:将几种机器学习技术组合成一个预测模型的方法,以减少方差(装袋)、偏差(提升)或提高预测力(堆叠别名集成)。

每个算法都包含两个步骤:

  1. 在原始数据的子集上生成简单 ML 模型的分布。

  2. 将分布组合成一个“聚合”模型。

以下是所有三种方法的简短描述:

  1. Bagging(代表B ootstrap Agg regating)是一种减少预测方差的方法,它通过使用重复组合从原始数据集生成用于训练的额外数据来生成原始数据相同基数/大小的多集。通过增加训练集的大小,您无法提高模型的预测力,而只是减少方差,将预测范围缩小到预期结果。

  2. 提升是一种两步方法,首先使用原始数据的子集生成一系列性能平均的模型,然后通过使用特定的成本函数(=多数票)将它们组合在一起来“提升”它们的性能。与 bagging 不同,在经典的 boosting中,子集的创建不是随机的,并且取决于先前模型的性能:每个新子集都包含(可能)被先前模型错误分类的元素。

  3. 堆叠类似于提升:您还可以将多个模型应用于原始数据。然而,这里的不同之处在于,您不仅有权重函数的经验公式,而是引入了元级别并使用另一种模型/方法来估计输入以及每个模型的输出来估计权重或,换句话说,在给定这些输入数据的情况下,确定哪些模型表现良好,哪些模型表现不佳。

这是一个比较表:

比较表

如您所见,这些都是将多个模型组合成一个更好的模型的不同方法,这里没有一个赢家:一切都取决于您的领域和您将要做什么。您仍然可以将堆叠视为一种更高级的提升,但是,为您的元级别找到一个好的方法的困难使得在实践中很难应用这种方法。

每个的简短示例:

  1. 装袋臭氧数据
  2. Boosting:用于提高光学字符识别(OCR) 的准确性。
  3. 堆叠:用于医学中癌症微阵列的分类。

装袋

  1. 并行集成:每个模型都是独立构建的

  2. 旨在减少方差,而不是偏差

  3. 适用于高方差低偏差模型(复杂模型)

  4. 基于树的方法的一个例子是随机森林,它开发完全生长的树木(请注意,RF 修改了生长过程以减少树木之间的相关性)

提升

  1. 序列集成:尝试在以前模型缺乏的地方添加新模型

  2. 旨在减少偏差,而不是方差

  3. 适用于低方差高偏差模型

  4. 基于树的方法的一个例子是梯度提升

只是为了详细说明于谦的回答。bagging 背后的想法是,当您使用非参数回归方法(通常是回归或分类树,但几乎可以是任何非参数方法)进行 OVERFIT 时,您倾向于使用高方差,无(或低)偏差部分的偏差/方差权衡。这是因为过拟合模型非常灵活(对来自同一总体的许多重采样的偏差很小,如果有的话)但具有很高的可变性(如果我收集一个样本并对其进行过拟合,而您收集一个样本并对其进行过拟合,我们的结果会有所不同,因为非参数回归跟踪数据中的噪声)。我们能做些什么?我们可以进行多次重采样(来自自举),每次过拟合,然后将它们平均在一起。这应该会导致相同的偏差(低),但会抵消一些方差,

梯度提升的核心与 UNDERFIT 非参数回归一起工作,这太简单了,因此不够灵活,无法描述数据中的真实关系(即有偏差),但是由于它们拟合不足,方差低(你会倾向于如果您收集新数据集,则获得相同的结果)。你如何纠正这一点?基本上,如果您拟合不足,则模型的残差仍然包含有用的结构(有关总体的信息),因此您可以使用基于残差的树来扩充您拥有的树(或任何非参数预测器)。这应该比原始树更灵活。您反复生成越来越多的树,每棵树都在第 k 步被加权树增强,该加权树基于适合于第 k-1 步残差的树。其中一棵树应该是最优的,所以你要么最终将所有这些树加权在一起,要么选择一个看起来最合适的树。因此梯度提升是构建一堆更灵活的候选树的一种方法。

像所有非参数回归或分类方法一样,有时 bagging 或 boosting 效果很好,有时一种或另一种方法平庸,有时一种或另一种方法(或两者)会崩溃和烧毁。

此外,这两种技术都可以应用于除树之外的回归方法,但它们最常与树相关联,可能是因为难以设置参数以避免拟合不足或过度拟合。

请参阅我的集成学习博客文章

在此处输入图像描述

此图像的来源: