梯度提升是构建预测模型最强大的技术之一。

今天您将了解梯度提升机器学习算法,并简要介绍它的来源和工作原理。

看完这篇文章,我们可以学习:

  • boosting 的起源来自学习理论和 AdaBoost。

  • 梯度提升的工作原理包括损失函数、弱学习器和加法模型。

  • 如何使用各种正则化方案提高基本算法的性能。

boosting 的想法来自于是否可以修改弱学习器以变得更好的想法。

Michael Kearns 将目标阐述为“假设提升问题”,从实践的角度将目标陈述为:

… 一种将相对较差的假设转换为非常好的假设的有效算法

—关于假设提升的思考 [PDF],1988 年

弱假设或弱学习器被定义为性能至少略好于随机机会的假设。

这些想法建立在 Leslie Valiant 在免费分发或可能近似正确(PAC) 学习方面的工作之上,PAC 学习是一个用于调查机器学习问题复杂性的框架。

假设提升是过滤观察的想法,留下弱学习器可以处理的那些观察,并专注于开发新的弱学习来处理剩余的困难观察。

这个想法是多次使用弱学习方法来获得一系列假设,每个假设都重新关注前一个发现困难和错误分类的例子。… 但是请注意,如何做到这一点并不明显

—可能近似正确:在复杂世界中学习和繁荣的自然算法,第 152 页,2013 年

AdaBoost 第一个提升算法

在应用中取得巨大成功的第一个 Boosting 实现是Adaptive Boosting 或简称AdaBoost。

Boosting 指的是通过结合粗略和适度不准确的经验法则来产生非常准确的预测规则的一般问题。

—在线学习的决策理论概括和对 boosting 的应用 [PDF],1995

AdaBoost 中的弱学习器是具有单个分裂的决策树,由于它们的短小,称为决策树桩。

AdaBoost 的工作原理是对观察进行加权,将更多的权重放在难以分类的实例上,而减少那些已经处理得当的实例。新的弱学习器按顺序添加,将他们的训练集中在更困难的模式上。

这意味着难以分类的样本会收到越来越大的权重,直到算法识别出正确分类这些样本的模型

—应用预测建模,2013 年

预测是通过弱学习者的预测的多数投票做出的,并由他们的个人准确性加权。AdaBoost 算法最成功的形式是针对二元分类问题,称为 AdaBoost.M1。

您可以在下面文章中了解有关 AdaBoost 算法的更多信息:

  • 用于机器学习的 Boosting 和 AdaBoost。

将 AdaBoost 推广为梯度提升

AdaBoost 和相关算法首先由 Breiman 在统计框架中重铸,称它们为 ARCing 算法。

Arcing 是 Adaptive Reweighting and Combining 的首字母缩写词。Arcing 算法中的每一步都包含一个加权最小化,然后是 [分类器] 和 [加权输入] 的重新计算。

—预测游戏和 Arching 算法 [PDF],1997

这个框架由弗里德曼进一步开发,称为梯度提升机。后来称为梯度提升或梯度树提升。

统计框架将 boosting 视为数值优化问题,其目标是通过使用类似梯度下降的程序添加弱学习器来最小化模型的损失。

这类算法被描述为阶段性加性模型。这是因为一次添加一个新的弱学习器,而模型中现有的弱学习器被冻结并保持不变。

请注意,此阶段性策略不同于在添加新项时重新调整先前输入项的逐步方法。

—贪婪函数逼近:梯度提升机 [PDF],1999

泛化允许使用任意可微的损失函数,将技术扩展到二元分类问题之外,以支持回归、多类分类等。

梯度提升的工作原理

梯度提升涉及三个要素:

  1. 要优化的损失函数。

  2. 进行预测的弱学习器。

  3. 添加弱学习器以最小化损失函数的加法模型。

1. 损失函数

使用的损失函数取决于要解决的问题的类型。

它必须是可微的,但支持许多标准损失函数,您可以定义自己的损失函数。

例如,回归可能使用平方误差,分类可能使用对数损失。

梯度提升框架的一个好处是不必为每个可能想要使用的损失函数派生新的提升算法,相反,它是一个足够通用的框架,可以使用任何可微的损失函数。

2. 弱学习者

决策树用作梯度提升中的弱学习器。

具体来说,回归树用于输出分割的真实值,其输出可以加在一起,允许添加后续模型输出并“校正”预测中的残差。

树以贪婪的方式构建,根据基尼等纯度分数选择最佳分割点或最小化损失。

最初,例如在 AdaBoost 的情况下,使用非常短的决策树,只有一个分裂,称为决策树桩。较大的树通常可以使用 4 到 8 层。

通常以特定方式约束弱学习器,例如最大数量的层、节点、分裂或叶节点。

这是为了确保学习器仍然很弱,但仍然可以以贪婪的方式构造。

3. 加法模型

一次添加一棵树,模型中现有的树不会改变。

梯度下降程序用于在添加树时最小化损失。

传统上,梯度下降用于最小化一组参数,例如回归方程中的系数或神经网络中的权重。在计算错误或损失后,更新权重以最小化该错误。

我们有弱学习器子模型或更具体地说是决策树,而不是参数。计算损失后,要执行梯度下降程序,我们必须向模型添加一棵树以减少损失(即跟随梯度)。我们通过参数化树来做到这一点,然后修改树的参数并通过(减少残差损失)向正确的方向移动。

通常这种方法称为函数梯度下降或函数梯度下降。

产生优化[成本]的分类器加权组合的一种方法是通过函数空间中的梯度下降

— 将算法提升为函数空间中的梯度下降 [PDF],1999

然后将新树的输出添加到现有树序列的输出中,以努力纠正或改进模型的最终输出。

一旦损失达到可接受的水平或不再改进外部验证数据集,就会添加固定数量的树或停止训练。

对基本梯度提升的改进

梯度提升是一种贪婪算法,可以快速过拟合训练数据集。

它可以受益于惩罚算法各个部分的正则化方法,并通过减少过度拟合来提高算法的性能。

在本节中,我们将了解基本梯度提升的 4 项增强功能:

  1. 树约束

  2. 收缩率

  3. 随机抽样

  4. 惩罚学习

1. 树约束

弱学习者有技能但仍然很弱是很重要的。

有多种方法可以约束树。

一个很好的通用启发式方法是,创建的约束树越多,模型中需要的树越多,反之,约束越少的单个树,所需的树就越少。

以下是一些可以强加给决策树构建的约束:

  • 树的数量,通常向模型中添加更多的树可能会导致过拟合的速度非常慢。建议是继续添加树,直到观察不到进一步的改进。

  • 树深度,更深的树是更复杂的树,更短的树是首选。一般来说,4-8 级的效果会更好。

  • 节点数或叶数,如深度,这可以约束树的大小,但如果使用其他约束,则不受对称结构的约束。

  • 在可以考虑拆分之前**,每个拆分的观察数**对训练节点的训练数据量施加了最小约束

  • 对损失的最小改进是对添加到树的任何拆分的改进的约束。

2. 加权更新

每棵树的预测按顺序加在一起。

每棵树对这个总和的贡献可以加权以减慢算法的学习速度。这种权重称为收缩率或学习率。

每次更新都简单地按“学习率参数 v”的值进行缩放

—贪婪函数逼近:梯度提升机 [PDF],1999

结果是学习速度变慢,反过来需要更多的树添加到模型中,反过来需要更长的时间来训练,提供了树的数量和学习率之间的配置权衡。

降低 v [学习率] 的值会增加 M [树的数量] 的最佳值。

—贪婪函数逼近:梯度提升机 [PDF],1999

通常具有 0.1 到 0.3 范围内的小值以及小于 0.1 的值。

类似于随机优化中的学习率,收缩减少了每棵树的影响,并为未来的树留下空间以改进模型。

—随机梯度提升 [PDF],1999

3. 随机梯度提升

对装袋集成和随机森林的一个重要见解是允许从训练数据集的子样本中贪婪地创建树。

同样的好处可用于减少梯度提升模型中序列中树之间的相关性。

这种提升的变化称为随机梯度提升。

在每次迭代时,从完整的训练数据集中随机(无替换)抽取训练数据的子样本。然后使用随机选择的子样本而不是完整样本来拟合基础学习器。

—随机梯度提升 [PDF],1999

可以使用的随机提升的一些变体:

  • 在创建每棵树之前对行进行子采样。

  • 创建每棵树之前的子样本列

  • 在考虑每个拆分之前对列进行子采样。

通常,积极的子采样(例如仅选择 50% 的数据)已被证明是有益的。

根据用户反馈,使用列子采样比传统的行子采样更能防止过拟合

— XGBoost:可扩展的树提升系统,2016 年

4. 惩罚梯度提升

除了结构之外,还可以对参数化树施加额外的约束。

像 CART 这样的经典决策树不用作弱学习器,而是使用一种称为回归树的修改形式,它在叶节点(也称为终端节点)中具有数值。在某些文献中,树的叶子中的值可以称为权重。

因此,可以使用流行的正则化函数对树的叶子权重值进行正则化,例如:

  • 权重的 L1 正则化。

  • 权重的 L2 正则化。

额外的正则化项有助于平滑最终学习的权重以避免过度拟合。直观地,正则化目标将倾向于选择采用简单和预测函数的模型。

— XGBoost:可扩展的树提升系统,2016 年

梯度提升资源

梯度提升是一种引人入胜的算法,我相信你想更深入。

本节列出了可用于了解有关梯度提升算法的更多信息的各种资源。

梯度提升视频

  • 梯度提升机器学习,Trevor Hastie,2014 年

  • 梯度提升,Alexander Ihler,2012

  • GBM , 约翰·芒特, 2015

  • 学习:提升,MIT 6.034 人工智能,2010

  • xgboost:用于快速准确梯度提升的 R 包,2016

  • XGBoost:一种可扩展的树提升系统,Tianqi Chen,2016

教科书中的梯度提升

  • 第 8.2.3 节 Boosting,第 321 页,统计学习简介:在 R 中的应用。

  • 第 8.6 节 Boosting,第 203 页,应用预测建模。

  • 第 14.5 节随机梯度提升,第 390 页,应用预测建模。

  • 第 16.4 节 Boosting,第 556 页,机器学习:概率视角

  • 第 10 章提升树和加法树,第 337 页,统计学习的要素:数据挖掘、推理和预测

梯度提升论文

  • 关于假设提升的思考 [PDF],迈克尔·卡恩斯,1988 年

  • 在线学习的决策理论概括和对提升的应用 [PDF], 1995

  • 弧形边缘 [PDF], 1998

  • 随机梯度提升 [PDF],1999

  • 提升算法作为函数空间中的梯度下降 [PDF],1999

概括

在这篇文章中,您发现了用于机器学习中预测建模的梯度提升算法。

具体来说,你学到了:

  • boosting 学习理论和 AdaBoost 的历史。

  • 梯度提升算法如何与损失函数、弱学习器和加法模型配合使用。

  • 如何通过正则化提高梯度提升的性能。

机器学习梯度提升知识就为大家介绍到这里了,欢迎各位同学了解<Python数据分析与机器学习项目实战>,学习更多机器学习相关知识:https://edu.csdn.net/combo/detail/1928

更多推荐