堆叠泛化(或简称“堆叠”)可能是一种不太流行的机器学习集成方法,因为它更像一个框架,而不是一个特定的模型。
它在主流机器学习中不太受欢迎的原因可能在于,正确训练堆叠模型而不遭受数据泄漏可能很棘手。这意味着该技术主要由高技能专家在要求严格的环境中使用,例如机器学习竞赛,并被赋予了新的名称,如混合集成。
尽管如此,现代机器学习框架使得堆叠在分类和回归预测建模问题中变得易于实现和评估。因此,我们可以从堆叠框架的角度来回顾与堆叠相关的集成学习方法。这种更广泛的堆叠技术家族也有助于在未来探索我们自己的预测建模项目时,了解如何调整该技术的配置。
在本教程中,您将发现机器学习集成中堆叠泛化方法的精髓。
完成本教程后,您将了解:
- 用于机器学习的堆叠集成方法使用元模型来组合来自贡献成员的预测。
- 如何从堆叠方法中提炼出基本要素,以及混合(blending)和超级集成(super ensemble)等流行扩展如何相关。
- 如何通过为该方法的基本要素选择新程序来设计堆叠的新扩展。
通过我的新书《使用Python的集成学习算法》启动您的项目,其中包括分步教程和所有示例的Python源代码文件。
让我们开始吧。

机器学习堆叠集成的精髓
图片由Thomas提供,保留部分权利。
教程概述
本教程分为四个部分;它们是
- 堆叠泛化
- 堆叠集成的精髓
- 堆叠集成家族
- 投票集成
- 加权平均
- 混合集成
- 超级学习器集成
- 定制堆叠集成
堆叠泛化
堆叠泛化,简称堆叠,是一种集成机器学习算法。
堆叠涉及使用机器学习模型来学习如何最好地组合来自贡献集成成员的预测。
在投票中,集成成员通常是不同模型类型的集合,例如决策树、朴素贝叶斯和支持向量机。预测通过平均预测来完成,例如选择得票最多的类别(统计模式)或总概率最大的类别。
……(未加权)投票只有在学习方案表现相当好时才有意义。
— 《数据挖掘:实用机器学习工具和技术》,2016年,第497页。
投票的一个扩展是在预测中对每个集成成员的贡献进行加权,提供加权和预测。这允许对平均表现更好的模型给予更多权重,而对那些表现不佳但仍具有一定预测技能的模型给予更少权重。
分配给每个贡献成员的权重必须通过学习获得,例如每个模型在训练数据集或保留数据集上的表现。
堆叠泛化了这种方法,并允许使用任何机器学习模型来学习如何最好地组合来自贡献成员的预测。组合预测的模型被称为元模型,而集成成员被称为基础模型。
投票的问题在于不清楚应该信任哪个分类器。堆叠试图学习哪些分类器是可靠的,使用另一个学习算法——元学习器——来发现如何最好地组合基础学习器的输出。
— 《数据挖掘:实用机器学习工具和技术》,2016年,第497页。
在引入该技术的论文中,基础模型被称为0级学习器,元模型被称为1级模型。
自然,模型的堆叠可以继续到任何期望的级别。
堆叠是一种通用过程,其中训练一个学习器来组合各个学习器。这里,各个学习器被称为第一级学习器,而组合器被称为第二级学习器或元学习器。
— 《集成方法》,2012年,第83页。
重要的是,元模型的训练方式与基础模型的训练方式不同。
元模型的输入是基础模型做出的预测,而不是来自数据集的原始输入。目标是相同的预期目标值。用于训练元模型的基础模型做出的预测是针对未用于训练基础模型的样本,这意味着它们是样本外预测。
例如,数据集可以分为训练集、验证集和测试集。然后,每个基础模型可以在训练集上拟合,并在验证数据集上进行预测。验证集中的预测然后用于训练元模型。
这意味着元模型被训练成在基础模型进行样本外预测时(例如,在训练期间未见的样本)最好地组合它们的能力。
……我们保留一些实例来形成一级学习器的训练数据,并从剩余数据中构建零级分类器。一旦零级分类器构建完成,它们就被用于对保留集中的实例进行分类,从而形成一级训练数据。
— 《数据挖掘:实用机器学习工具和技术》,2016年,第498页。
一旦元模型训练完成,基础模型可以在组合的训练和验证数据集上重新训练。然后,整个系统可以通过首先将样本通过基础模型收集基础级预测,然后将这些预测通过元模型获得最终预测,从而在测试集上进行评估。在对新数据进行预测时,系统可以以相同的方式使用。
这种训练、评估和使用堆叠模型的方法可以进一步泛化以与k折交叉验证结合使用。
通常,基础模型使用不同的算法进行准备,这意味着集成模型是不同模型类型的异构集合,为所做的预测提供了所需的 다양性。然而,这并非必须如此,也可以使用相同模型的不同配置,或者在不同数据集上训练相同模型。
第一级学习器通常通过应用不同的学习算法生成,因此,堆叠集成通常是异构的。
— 《集成方法》,2012年,第83页。
在分类问题上,当基础模型被配置为预测概率而不是明确的类别标签时,堆叠集成通常表现更好,因为预测中增加的不确定性为元模型在学习如何最佳组合预测时提供了更多上下文。
……大多数学习方案能够为每个类别标签输出概率,而不是进行单一的分类预测。这可以被利用来通过使用概率形成一级数据来提高堆叠的性能。
— 《数据挖掘:实用机器学习工具和技术》,2016年,第498页。
元模型通常是一个简单的线性模型,例如用于回归问题的线性回归或用于分类问题的逻辑回归模型。同样,这并非必须如此,任何机器学习模型都可以用作元学习器。
……因为大部分工作已经由0级学习器完成,所以1级分类器基本上只是一个仲裁者,为此目的选择一个相当简单的算法是有意义的。[……]简单的线性模型或带有线性模型叶子的树通常效果很好。
— 《数据挖掘:实用机器学习工具和技术》,2016年,第499页。
这是堆叠集成方法的高层次概述,但我们可以泛化该方法并提取其基本要素。
想开始学习集成学习吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
堆叠集成的精髓
堆叠的精髓在于学习如何组合贡献的集成成员。
通过这种方式,我们可以将堆叠视为假设简单的“群众智慧”(例如平均)是好的但并非最佳,并且如果我们能够识别并给予人群中的专家更多权重,则可以取得更好的结果。
专家和次级专家根据他们在新情况(例如样本外数据)中的技能进行识别。这与简单的平均和投票有重要区别,尽管它引入了使得该技术难以正确实施并避免数据泄漏的复杂性,进而导致不正确和乐观的性能。
尽管如此,我们可以看到堆叠是一种非常通用的集成学习方法。
从广义上讲,我们可以将集成模型的加权平均视为对投票集成的一种泛化和改进,而堆叠则是加权平均模型的进一步泛化。
因此,堆叠过程的结构可以分为三个基本要素;它们是:
- 多样化的集成成员:创建一组生成不同预测的多样化模型。
- 成员评估:评估集成成员的性能。
- 模型组合:使用模型组合来自成员的预测。
我们可以将经典堆叠映射到这些要素如下:
- 多样化的集成成员:使用不同的算法来拟合每个贡献模型。
- 成员评估:评估模型在样本外预测上的性能。
- 模型组合:用于组合预测的机器学习模型。
这提供了一个我们可以考虑相关集成算法的框架。
让我们仔细看看其他一些可能被认为是堆叠家族一部分的集成方法。
堆叠集成家族
许多集成机器学习技术可以被视为堆叠的前身或后代。
因此,我们可以将它们映射到我们的基本堆叠框架上。这是一项有益的练习,因为它既突出了方法之间的差异和每种技术的独特性。也许更重要的是,它也可能激发您在自己的预测建模项目中想要探索的其他变体。
让我们仔细看看与堆叠相关的四种更常见的集成方法。
投票集成
投票集成是最简单的集成学习技术之一。
投票集成通常涉及使用不同的算法来准备每个集成成员,这与堆叠非常相似。不同之处在于,它使用简单的统计方法而不是学习如何组合预测。
在回归问题上,投票集成可能会预测集成成员预测的平均值或中位数。对于分类问题,预测得票最多的标签,称为硬投票,或者预测总概率最大的标签,称为软投票。
与堆叠的重要区别在于,它不根据模型性能对模型进行加权。所有模型平均具有相同的技能水平。
- 成员评估:假设所有模型技能均等。
- 模型组合:简单统计。
加权平均集成
加权平均可以被认为是投票集成之上的一步。
像堆叠和投票集成一样,加权平均使用各种模型类型作为贡献成员。
与投票不同,加权平均假设某些贡献成员比其他成员更好,并相应地权衡模型的贡献。
最简单的加权平均集成根据每个模型在训练数据集上的表现来加权。这种朴素方法的改进是根据每个模型在保留数据集上的表现来加权每个成员,例如在k折交叉验证期间的验证集或折外预测。
更进一步,可能涉及使用优化算法和在保留数据集上的表现来调整每个模型的系数权重。
这些加权平均模型的持续改进开始类似于一个原始的堆叠模型,其中训练了一个线性模型来组合预测。
- 成员评估:成员在训练数据集上的表现。
- 模型组合:预测的加权平均。
混合集成
融合(Blending)明确是一个具有特定配置的堆叠泛化模型。
堆叠的一个局限性是没有普遍接受的配置。这使得该方法对于初学者来说具有挑战性,因为基本上任何模型都可以用作基础模型和元模型,并且可以使用任何重采样方法来准备元模型的训练数据集。
融合是一种特定的堆叠集成方法,它规定了两点。
第一是使用保留验证数据集来准备用于训练元模型的样本外预测。第二是使用线性模型作为元模型。
这项技术诞生于机器学习竞赛中从业者的需求,这些竞赛涉及开发大量的基础学习器模型,这些模型可能来自不同的来源(或团队),而使用数据集的k折交叉验证分区进行验证可能计算成本过高且协调起来太具挑战性。
- 成员预测:在验证数据集上的样本外预测。
- 模型组合:线性模型(例如线性回归或逻辑回归)。
鉴于混合集成的流行,堆叠有时特指使用k折交叉验证来为元模型准备样本外预测。
超级学习器集成
与混合一样,超级集成是堆叠集成的一种特定配置。
超学习中的元模型是使用在 k 折交叉验证期间收集的基础学习器的折外预测来准备的。
因此,我们可以将超级学习器集成视为混合集成的姐妹方法,主要区别在于为元学习器准备样本外预测的选择方式。
- 多样化的集成成员:使用不同的算法和相同算法的不同配置。
- 成员评估:k折交叉验证的折外预测。
定制堆叠集成
我们已经回顾了作为组合来自不同模型类型预测的框架的经典堆叠。
堆叠是一种广泛的方法,这可能使其难以开始使用。我们可以看到投票集成和加权平均集成是堆叠方法的简化,而混合集成和超学习器集成是堆叠的特定配置。
本次回顾强调,不同堆叠方法的重点在于元模型的复杂性,例如使用统计、加权平均或真正的机器学习模型。重点还在于元模型的训练方式,例如来自验证数据集或k折交叉验证的样本外预测。
堆叠的另一个探索领域可能超越仅仅使用不同算法,而是关注集成成员的多样性。
与boosting和bagging都规定使用决策树不同,堆叠对模型类型没有规定。这使得在数据集上定制和探索使用该方法具有很大的灵活性。
例如,我们可以想象在训练数据集的引导样本上拟合大量的决策树,就像我们在装袋法中那样,然后测试一套不同的模型来学习如何最好地组合来自这些树的预测。
- 多样化的集成成员:在引导样本上训练的决策树。
或者,我们可以想象对单个机器学习模型的大量配置进行网格搜索,这在机器学习项目中很常见,并保留所有拟合的模型。然后这些模型可以作为堆叠集成的成员使用。
- 多样化的集成成员:相同算法的不同配置。
我们还可以将“专家混合”技术视为融入堆叠方法。
专家混合(Mixture of experts,简称MoE)是一种明确将问题划分为子问题,并在每个子问题上训练模型,然后使用模型学习如何最好地加权或组合来自专家的预测的技术。
堆叠和专家混合之间重要的区别在于MoE明确的“分而治之”方法以及使用门控网络组合预测的更复杂方式。
尽管如此,我们想象将输入特征空间划分为子空间网格,在每个子空间上训练一个模型,并使用一个元模型,该元模型以基础模型的预测以及原始输入样本作为输入,并根据输入数据学习信任或最看重哪个基础模型。
- 多样化的集成成员:将输入特征空间划分为统一子空间。
这可以进一步扩展,首先为每个子空间选择在众多模型类型中表现良好的一个模型类型,只保留每个子空间中表现最佳的专家,然后学习如何最佳地组合它们的预测。
最后,我们可能会将元模型视为对基础模型的一种修正。我们可以探索这个想法,让多个元模型尝试修正重叠或不重叠的贡献成员池,以及在其之上堆叠额外的模型层。这种更深层次的模型堆叠有时用于机器学习竞赛中,并且可能变得复杂且难以训练,但对于模型技能远超模型可解释性的预测任务,它可能会提供额外的好处。
我们可以看到,堆叠方法的通用性为实验和定制留下了很大的空间,其中可以直接融合来自 boosting 和 bagging 的思想。
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
相关教程
- 使用 Python 的堆叠集成机器学习
- 如何在 Python 中使用 Keras 为深度学习神经网络开发堆叠集成
- 如何用 Python 从零开始实现堆叠泛化(Stacking)
- 如何使用 Python 开发投票集成
- 如何在 Python 中开发超级学习器集成
书籍
- 使用集成方法进行模式分类, 2010.
- 集成方法, 2012.
- 集成机器学习, 2012.
- 《数据挖掘:实用机器学习工具与技术》(Data Mining: Practical Machine Learning Tools and Techniques), 2016.
总结
在本教程中,您了解了机器学习集成中堆叠泛化方法的精髓。
具体来说,你学到了:
- 用于机器学习的堆叠集成方法使用元模型来组合来自贡献成员的预测。
- 如何从堆叠方法中提炼出基本要素,以及混合(blending)和超级集成(super ensemble)等流行扩展如何相关。
- 如何通过为该方法的基本要素选择新程序来设计堆叠的新扩展。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
您的文章解释得很清楚。读起来很容易。我非常喜欢阅读它。只有一个
我不太明白。在堆叠模型中,成员贡献者的预测如何
整合到元模型中以进一步改进预测。您提到了
回归。不清楚回归如何使用。
如果您能解释一下,我将不胜感激。
谢谢。
子模型的预测直接作为输入传递给元模型。
我们不能将每个子样本的预测用作自变量,将实际值用作因变量吗?
如果您能通过我的电子邮件回复我,那将非常有帮助。我今天才看到您的回复。