机器学习中 Boosting 集成的精髓

提升是一种强大且流行的集成学习技术。

历史上,提升算法的实现很困难,直到 AdaBoost 展示了如何实现提升,该技术才能被有效使用。AdaBoost 和现代梯度提升通过顺序添加模型来纠正模型的残差预测误差。因此,提升方法以其有效性而闻名,但模型构建可能很慢,特别是对于大型数据集。

最近,为提高计算效率而设计的扩展使得这些方法足够快速,可以得到更广泛的应用。诸如 XGBoost 和 LightGBM 等开源实现意味着,在分类和表格数据回归的机器学习竞赛中,提升算法已成为首选且通常是表现最佳的方法。

在本教程中,您将了解提升在机器学习集成中的精髓。

完成本教程后,您将了解:

  • 用于机器学习的提升集成方法通过训练在加权版本训练数据集上的弱学习器来逐步添加模型。
  • 所有提升算法的基本思想以及每种提升算法中使用的关键方法。
  • 可以如何在新的预测建模项目上探索提升的基本思想。

立即开始您的项目,阅读我的新书 《Python 中的集成学习算法》,其中包含分步教程和所有示例的Python 源代码文件。

让我们开始吧。

Essence of Boosting Ensembles for Machine Learning

机器学习中 Boosting 集成的精髓
照片由 Armin S Kowalski 拍摄,保留部分权利。

教程概述

本教程分为四个部分;它们是

  1. 提升法集成
  2. 提升集成的精髓
  3. 提升集成算法家族
    1. AdaBoost 集成
    2. 经典梯度提升集成
    3. 现代梯度提升集成
  4. 定制提升集成

提升法集成

提升是一种强大的集成学习技术。

因此,提升很受欢迎,并且可能是撰写本文时使用最广泛的集成技术。

提升是过去二十年中最重要的学习思想之一。

— 第 337 页,《统计学习要素》,2016 年。

作为一种集成技术,它可能比诸如自助聚集(bagging)和堆叠泛化(stacking)之类的同类方法更复杂。实际上,实现可能相当复杂,但提升集成背后的思想却非常简单。

通过将其与 bagging 进行对比,可以理解提升。

在 bagging 中,通过制作相同训练数据集的多个不同样本并对每个样本拟合一个决策树来创建集成。鉴于训练数据集的每个样本都不同,因此每个决策树都不同,从而做出略有不同的预测和预测误差。合并所有创建的决策树的预测,可以降低单个树的拟合误差。

提升以类似的方式运行。对不同的训练数据集版本拟合多个树,并通过简单的投票(分类)或平均(回归)组合这些树的预测,以获得比拟合单个决策树更好的预测。

……提升 […] 使用简单的多数投票组合弱分类器集成……

— 第 13 页,《集成机器学习》,2012 年。

存在一些重要的区别;它们是

  • 训练集中的实例根据难度分配权重。
  • 学习算法必须关注实例权重。
  • 集成成员按顺序添加。

第一个区别是,相同的训练数据集用于训练每个决策树。不进行训练数据集的采样。取而代之的是,根据集成预测该实例的难易程度,为训练数据集中的每个示例(数据行)分配权重。

该算法背后的主要思想是更加关注难以分类的模式。关注的程度由分配给训练集中每个模式的权重来量化。

— 第 28-29 页,《使用集成方法进行模式分类》,2010 年。

这意味着易于通过集成预测的行权重较小,而难以正确预测的行权重则大得多。

提升以类似的方式工作,只是树是按顺序生长的:每棵树都使用先前生长的树的信息来生长。提升不涉及 bootstrap 采样;相反,每棵树都拟合在原始数据集的修改版本上。

— 第 322 页,《统计学习导论(带 R 应用)》,2014 年。

与 bagging 的第二个区别是,基本学习算法(例如决策树)必须关注训练数据集的权重。反过来,这意味着提升专门设计用于将决策树作为基本学习器,或者其他在构建模型时支持行权重的算法。

模型的构建必须更多地关注训练示例,这与其分配的权重成正比。这意味着集成成员以有偏倚的方式构建,以对加权示例进行正确预测(或努力使其正确预测)。

最后,提升集成是缓慢构建的。集成成员按顺序添加,一个接一个,直到集成达到所需的成员数量。

重要的是,训练数据集的权重会根据每个集成成员添加后整个集成的能力进行更新。这确保了随后添加的每个成员都在努力纠正整个模型在训练数据集上的错误。

在提升中,然而,每个后续分类器的训练数据集越来越关注先前生成的分类器误分类的实例。

— 第 13 页,《集成机器学习》,2012 年。

每个模型对最终预测的贡献是每个模型性能的加权总和,例如加权平均值或加权投票。

这种增量添加集成成员来纠正训练数据集上的错误听起来最终会导致训练数据集过拟合。实际上,提升集成确实会过拟合训练数据集,但通常,这种效果很微妙,过拟合不是主要问题。

与 bagging 和随机森林不同,提升如果 [树的数量] 过多,可能会过拟合,尽管这种过拟合往往发生得很慢,甚至不发生。

— 第 323 页,《统计学习导论(带 R 应用)》,2014 年。

这是对提升集成方法的鸟瞰式总结,与 AdaBoost 算法非常相似,但我们可以概括该方法并提取基本要素。

想开始学习集成学习吗?

立即参加我为期7天的免费电子邮件速成课程(附示例代码)。

点击注册,同时获得该课程的免费PDF电子书版本。

提升集成的精髓

提升的精髓似乎在于纠正预测。

所有现代提升算法都是这样实现的,这是一个有趣且重要的思想。尽管如此,纠正预测误差可能被认为是实现提升(一个庞大而重要的细节)的实现细节,而不是提升集成方法的精髓。

提升的精髓是将多个弱学习器组合成一个强学习器。

提升和分类器集成的策略是学习许多弱分类器并将它们以某种方式组合起来,而不是尝试学习一个强分类器。

— 第 35 页,《集成机器学习》,2012 年。

弱学习器是一种技能非常适度的模型,通常意味着其性能略高于随机分类器(对于二元分类)或回归的平均值预测。传统上,这意味着决策桩(decision stump),即一个考虑单个变量值并做出预测的决策树。

弱学习器(WL)是一种学习算法,它能够产生错误概率严格(但仅略微)低于随机猜测的分类器……

— 第 35 页,《集成机器学习》,2012 年。

弱学习器可以与执行预测建模问题表现良好的强学习器进行对比。一般来说,我们寻求强学习器来解决分类或回归问题。

……强学习器(SL)能够(在有足够的训练数据的情况下)产生任意小错误概率的分类器。

— 第 35 页,《集成机器学习》,2012 年。

尽管我们为给定的预测建模问题寻求强学习器,但它们的训练非常困难。而弱学习器训练起来非常快速且容易。

提升认识到这种区别,并提出明确地从多个弱学习器构建强学习器。

提升是一类机器学习方法,其基础思想是,简单分类器的组合(由弱学习器获得)可以比任何单个简单分类器都表现得更好。

— 第 35 页,《集成机器学习》,2012 年。

已经探索了许多提升方法,但只有一种真正成功。那就是前面部分所述的方法,其中将弱学习器顺序添加到集成中,以专门解决或纠正回归树的残差误差或分类的类标签预测误差。结果是一个强学习器。

让我们仔细看看可以被视为提升家族一部分的集成方法。

提升集成算法家族

有大量的提升集成学习算法,尽管它们的工作方式基本上相同。

也就是说,它们涉及顺序添加在训练数据集的(重新)加权版本上训练的简单基本学习器模型。

术语“Boosting”指的是一系列能够将弱学习器转化为强学习器的算法。

— 第 23 页,《集成方法》,2012 年。

我们可以考虑三种主要的提升方法;它们是:AdaBoost、经典梯度提升和现代梯度提升。

这种划分有些随意,因为存在可能跨越所有组的技术,或者可以配置以实现每个组的示例的实现,甚至包括基于 bagging 的方法。

AdaBoost 集成

最初,朴素的提升方法探索了在训练数据集的独立样本上训练弱分类器并组合预测。

与 bagging 相比,这些方法并不成功。

自适应提升,简称 AdaBoost,是提升的首次成功实现。

研究人员花费了一段时间才找到提升理论的有效实现,直到 Freund 和 Schapire 合作开发了 AdaBoost 算法。

— 第 204 页,《应用预测建模》,2013 年。

它不仅是提升原则的一次成功实现;它还是分类的有效算法。

提升,特别是 AdaBoost 算法形式的提升,被证明是一种强大的预测工具,通常优于任何单个模型。它的成功引起了建模界的关注,并被广泛使用……

— 第 204 页,《应用预测建模》,2013 年。

虽然 AdaBoost 最初是为二元分类开发的,但后来扩展到多类分类、回归以及无数其他扩展和专用版本。

它们是第一个维护相同训练数据集并引入训练样本加权和经过训练以纠正集成预测误差的模型顺序添加的方法。

经典梯度提升集成

在 AdaBoost 取得成功之后,提升方法受到了广泛关注。

梯度提升是 AdaBoost 技术组的泛化,它允许使用任意损失函数来训练每个后续的基本学习。

与其为每个不同的损失函数导出新版本的提升,不如可以导出通用版本,称为梯度提升。

— 第 560 页,《机器学习:概率视角》,2012 年。

梯度提升中的“梯度”指的是选定损失函数的预测误差,该误差通过添加基本学习器来最小化。

梯度提升的基本原理如下:给定一个损失函数(例如,回归的平方误差)和一个弱学习器(例如,回归树),算法会尝试找到一个加性模型来最小化损失函数。

— 第 204 页,《应用预测建模》,2013 年。

在将 AdaBoost 重构为梯度提升并使用替代损失函数之后,出现了许多进一步的创新,例如多元自适应回归树(MART)、树提升和梯度提升机(GBM)。

如果我们使用(浅层)回归树结合梯度提升算法,我们会得到一个称为 MART 的模型 […] 在将回归树拟合到残差(负梯度)后,我们重新估计树叶中的参数以最小化损失……

— 第 562 页,《机器学习:概率视角》,2012 年。

该技术得到了扩展,包括正则化,以尝试进一步减缓学习以及为每个决策树采样行和列,以增加集成成员的一些独立性,这基于 bagging 的思想,称为随机梯度提升。

现代梯度提升集成

梯度提升及其变体已被证明非常有效,但训练速度通常很慢,特别是对于大型训练数据集。

这主要是由于集成成员的顺序训练,无法并行化。这是不幸的,因为并行训练集成成员及其提供的计算速度提升是使用集成的一个经常被描述为期望的属性。

因此,人们付出了很多努力来提高该方法的计算效率。

这导致了梯度提升高度优化的开源实现,这些实现引入了创新技术,这些技术既加速了模型的训练,又提供了进一步改进的预测性能。

值得注意的例子包括 Extreme Gradient Boosting (XGBoost) 和 Light Gradient Boosting Machine (LightGBM) 项目。两者都非常有效,以至于在处理表格数据时,它们已成为机器学习竞赛中的事实标准方法。

定制提升集成

我们已简要回顾了经典的提升算法类型。

XGBoost 和 LightGBM 等算法的现代实现提供了足够多的配置超参数,可以实现许多不同类型的提升算法。

尽管与 bagging 等实现更简单的方法相比,提升最初很难实现,但基本思想可能有助于您将来在自己的预测建模项目中探索或扩展集成方法。

从弱学习器构建强学习器的基本思想可以以多种方式实现。例如,使用决策桩或其他类似弱学习器的标准机器学习算法的 bagging 可以被认为是该方法的一种实现。

  • bagging 弱学习器。

它还与其他集成类型形成对比,例如堆叠(stacking),堆叠试图将多个强学习器组合成一个稍强的学习器。即便如此,也许通过堆叠不同的弱学习器也能在项目上取得成功。

  • 堆叠弱学习器。

有效的提升之路涉及加权训练示例的具体实现细节、能够尊重加权的模型的细节,以及在某种损失最小化方法下拟合的模型进行顺序添加。

尽管如此,这些原理可以更普遍地应用于集成模型。

例如,也许可以顺序地将成员添加到 bagging 或 stacking 集成中,并且仅在它们能有用地提高技能、降低预测误差或改变模型预测分布时才保留它们。

  • 顺序 bagging 或 stacking。

在某些方面,堆叠提供了纠正其他模型预测思想的一种实现。元模型(level-1 学习器)试图有效地组合基础模型(level-0 学习器)的预测。在某种意义上,它试图纠正这些模型的预测。

堆叠模型的层次可以根据特定要求进行添加,例如最小化部分或全部预测误差。

  • 深度堆叠模型。

这些是探索提升方法精髓的一些也许显而易见的方法,希望它们能激发进一步的想法。我鼓励您集思广益,思考如何将这些方法应用到您自己的特定项目中。

进一步阅读

如果您想深入了解,本节提供了更多关于该主题的资源。

相关教程

书籍

文章

总结

在本教程中,您了解了提升在机器学习集成中的精髓。

具体来说,你学到了:

  • 用于机器学习的提升集成方法通过训练在加权版本训练数据集上的弱学习器来逐步添加模型。
  • 所有提升算法的基本思想以及每种提升算法中使用的关键方法。
  • 可以如何在新的预测建模项目上探索提升的基本思想。

你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。

掌握现代集成学习!

Ensemble Learning Algorithms With Python

在几分钟内改进您的预测

...只需几行python代码

在我的新电子书中探索如何实现
使用 Python 实现集成学习算法

它提供**自学教程**,并附有关于以下内容的**完整工作代码**:
堆叠、投票、提升、装袋、混合、超级学习器等等……

将现代集成学习技术带入
您的机器学习项目


查看内容

2 条关于机器学习提升集成精髓的回复

  1. rafael 2021 年 6 月 5 日下午 1:49 #

    谢谢,一如既往的出色解释。这个网站真是知识的宝库!
    我认为“群体智慧”的概念对于理解如何组合弱模型来构建强模型非常有用。

发表回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。