在没有技术术语的情况下介绍Adaptive、GBDT、XGboosting等提升算法的原理简介

简介: 在没有技术术语的情况下介绍Adaptive、GBDT、XGboosting等提升算法的原理简介

这篇文章将不使用任何的术语介绍每个提升算法如何决定每棵树的票数。通过理解这些算法是如何工作的,我们将了解什么时候使用哪种工具。

640.png

提升家庭有三名成员。它们是Adaptive Boosting(自适应提升)、Gradient Boosting(梯度提升)和XG Boosting.(极端梯度提升)。它将按顺序进行讨论。

Adaboost

Adaboost只用一个因素来判断一棵树的好坏——它的准确性。然而,这里有一个狡猾的转折。每棵树都由一组稍有不同的样本进行训练。所以?

假设你正在准备SAT考试,考试分为四个部分:阅读、写作、数学1(没有计算器)、数学2(没有计算器)。为了简单起见,假设每个部分有15个问题需要回答,总共60个问题。你做了一次模拟考试,你发现你的数学得了最低分。所以下次,你们练习更多的数学1题,少练习其他部分的问题。因此,你仍然每次练习60道题,但组合略有不同。

Adaboost的一个特别之处是它用树桩(投票者)建造了一片森林,我们之所以称其为树桩是因为投票者是一层深度的树。现在,把它当作一个约束。让我们先来解决它是如何决定投票者的。

假设我们要建立一个模型来预测客户是否会购买我们的新产品。我们有6个样品客户。我们有Amy, Tom, John, Tim, Lucy, and Mike 的数据(见下图1)。以下是建立森林的步骤:

640.png

  1. 像建普通的树一样建一个树桩。所以选择能够正确分类大多数样本的变量。这就是我们的投票者。
  2. 投票者1的准确率为83%,而Tim的分类是错误的。所以我将样本Tim的权重提高到0.3,其他样本的权重降低到0.14,让它们加起来等于1。
  3. 我使用新的加权样本建立了树桩2,准确率为87%。John的错误最多。由于正确分类的每个样本的权重现在略有不同,所以树桩 2的准确率为87%(注意:这不是精确的计算)。
  4. 下次我会提高John的权重,降低其他样品的权重。如果我们没有设置我们想要的最大树数,那么这个过程将会重复,直到准确率达到100%。

640.png

假设我把上限设为3。就像我之前提到的,每个投票者能得到多少选票完全取决于他们的模型的准确性。它使用下面的公式来决定它的最终结果。

640.png

括号内的所有内容反映了模型给出正确预测的可能性。例如,对于stump 1来说,给出正确预测的概率是错误预测的5倍。

神奇之处在于log部分。由于对数的性质,如果我们的模型误差为0(分母趋近于0),我们会给出无穷大的正幂,如果我们有很多误差,我们会给出一个很大的负数(试着把错误率设为99%)。

在我们知道了每个投票者能得到多少选票之后,我们只要把他们的选票加起来就行了。得票多的类将获胜。

640.png

我们为什么要用树桩(一层的树)呢?为什么不用树呢?

让我们后退一步,看看整个画面。这里的关键思想是突出难以预测的样本,以便我们可以建立一个适合这些样本的模型。

当我们构建一个超过1级的树时,预测也取决于我们如何构建树。我们可以通过使用不同顺序的预测器得出不同的预测结果。这削弱了我们的目的。

这也是为什么对于不平衡数据集,提升算法比随机森林和决策树给出了更稳健的分析。提升算法将能够更好地预测少数族裔的模型纳入其中。

Adaboost的问题是,每次你建立一个树桩,你需要重新建立整个样本集!假设你有成千上万的样本,甚至计算机都不想做这个工作。这就是为什么要引入Gradientboost !

Gradientboost

Gradientboost通过不使用样本构建树来解决这个问题。它利用预测和实际结果之间的差异,也就是残差来构建树。

下图简单地展示了这个过程。基于样本集,我们将首先给出一个log(odds)预测,即我们的模型预测一个类比另一个类的可能性有多大。然后将log(概率)转换为概率,计算残差。从这里开始,我们将开始构建一个森林,以便每棵树都将残差(剩余值)最小化。然后我们把所有的东西都和最初的预测一起一起加起来。最后,我们有了一个新的可能性!

640.png

下面是一个可视化流程的示例,以便我们更好地理解它。我们有一个分类问题,因此,我们的预测可以是0或1。在这个例子中,我们有4个1和2个0。因此,log(机率)是0。69。转化为概率后,它是0。67。Amy的残差是1-0.67,Tom的残差是0-0.67。在右边,我比较了一个普通树和一个残差树。

640.png

640.png

在一个普通的树中,叶子节点给我们一个最终的类预测,例如,红色或绿色。在残差树中,叶子节点给出了残差。例如,从左到右,第一片叶子(-0.7)是-0.7。第二个叶节点(0.3,-0.7)是-0.4,最后一个叶节点是0.9。

这里的概念是:如果叶子的总和是很大的负数或很大的正数,它就把正确的样本分组在一起。另一方面,如果它们不相同,值会相互抵消,因此接近于0。

一棵树的值是它所有叶子节点的总和。在构建完所有树之后,我们将所有树的值相加,并将它们添加到初始预测日志中。因此,如果一个树的值越大,它对初始预测应该如何变化的影响就越大。

640.png

每棵树的值将乘以0。1。这个值称为学习率,您可以任意选择任何值,但是0.1是常用值。它很小,因此它确保每棵树只对初始值进行了轻微的更改。

关于Gradientboost,我想说的最后一件事是,它实际上使用了一棵树而不是树桩。但通常我们将max_depth限制在6到8之间,以避免过拟合。Gradientboost不使用树桩,因为它没有使用树来检测困难的样本。它构建树来最小化残差。

更多的技术见解:一棵树如何影响另一棵树

当我们计算叶子的值时,我们实际上使用下面的公式,而不是简单地将剩余相加。我想分享一些关于如何理解这个公式的简介。这个公式的实际数学运算非常麻烦。它包含二阶导数。所以我们不会从哪个角度说明。

640.png

在上面的公式中,分母中的P是最后一棵树给出的基于其总log(odds)的概率。我在下面列出了四种情况,以便我们了解这个公式的含义。

640.png

从分母上看,如果前一棵树对它的预测非常有信心,那么下一棵树将有一个更大的值(更大的发言权)。从分子来看,如果当前树的残差很大,那么它也会导致一个更大的值。这就像我们已经讨论过的。这也是最后一棵树的精度如何影响森林中下一棵树的精度。

为什么我们还需要XGboost?

XGboost是专门为大型数据集设计的,因为它非常快。它使用了很多优化和正则化技术这超出了我想讲的范围。

我确实想强调XGboost和Gradientboost之间的一个关键区别。在Gradientboost中,我们计算每个样本的残差后,选取一个节点进行分割,然后继续使用传统的方法构建树。当面对大型数据集时,这个过程可能非常耗时。

因此,XGboost又向前推进了一步。它没有使用预估器作为树节点。它构建树来将残差进行分组。就像我之前提到的,相似的样本会有相似的残值。树节点是可以分离残差的值。因此,XGboost中的叶子是残差,而XGboost中的树节点是可以对残差进行分组的值!

XGboost的速度使它真正适用于大型数据集。然而,当我们有一个合理数量的样本,比如几千个,Gradientboost实际上是更健壮的。所以在一些小的数据集的时候我们可以首先使用Gradientboost。

好了,本篇文章就到这里,希望对你有所帮助。

目录
相关文章
|
24天前
|
数据采集 机器学习/深度学习 算法
|
19天前
|
前端开发 算法 JavaScript
React原理之Diff算法
【8月更文挑战第24天】
|
26天前
|
存储 人工智能 算法
AI算法的道德与社会影响:探索技术双刃剑的边界
【8月更文挑战第22天】AI算法作为一把双刃剑,在推动社会进步的同时,也带来了诸多道德与社会挑战。面对这些挑战,我们需要以开放的心态、严谨的态度和创新的思维,不断探索技术发展与伦理规范之间的平衡之道,共同构建一个更加美好、更加公正的AI未来。
|
8天前
|
机器学习/深度学习 算法 Python
群智能算法:深入解读人工水母算法:原理、实现与应用
近年来,受自然界生物行为启发的优化算法备受关注。人工水母算法(AJSA)模拟水母在海洋中寻找食物的行为,是一种新颖的优化技术。本文详细解读其原理及实现步骤,并提供代码示例,帮助读者理解这一算法。在多模态、非线性优化问题中,AJSA表现出色,具有广泛应用前景。
|
22天前
|
存储 负载均衡 监控
自适应负载均衡算法原理和实现
自适应负载均衡算法原理和实现
|
25天前
|
算法 安全 网络安全
Diffie-Hellman (DH) 算法的工作原理
【8月更文挑战第23天】
77 0
|
27天前
|
数据采集 搜索推荐 算法
【高手进阶】Java排序算法:从零到精通——揭秘冒泡、快速、归并排序的原理与实战应用,让你的代码效率飙升!
【8月更文挑战第21天】Java排序算法是编程基础的重要部分,在算法设计与分析及实际开发中不可或缺。本文介绍内部排序算法,包括简单的冒泡排序及其逐步优化至高效的快速排序和稳定的归并排序,并提供了每种算法的Java实现示例。此外,还探讨了排序算法在电子商务、搜索引擎和数据分析等领域的广泛应用,帮助读者更好地理解和应用这些算法。
17 0
|
12天前
|
算法 BI Serverless
基于鱼群算法的散热片形状优化matlab仿真
本研究利用浴盆曲线模拟空隙外形,并通过鱼群算法(FSA)优化浴盆曲线参数,以获得最佳孔隙度值及对应的R值。FSA通过模拟鱼群的聚群、避障和觅食行为,实现高效全局搜索。具体步骤包括初始化鱼群、计算适应度值、更新位置及判断终止条件。最终确定散热片的最佳形状参数。仿真结果显示该方法能显著提高优化效率。相关代码使用MATLAB 2022a实现。
|
12天前
|
算法 数据可视化
基于SSA奇异谱分析算法的时间序列趋势线提取matlab仿真
奇异谱分析(SSA)是一种基于奇异值分解(SVD)和轨迹矩阵的非线性、非参数时间序列分析方法,适用于提取趋势、周期性和噪声成分。本项目使用MATLAB 2022a版本实现从强干扰序列中提取趋势线,并通过可视化展示了原时间序列与提取的趋势分量。代码实现了滑动窗口下的奇异值分解和分组重构,适用于非线性和非平稳时间序列分析。此方法在气候变化、金融市场和生物医学信号处理等领域有广泛应用。
|
1月前
|
算法
基于模糊控制算法的倒立摆控制系统matlab仿真
本项目构建了一个基于模糊控制算法的倒立摆控制系统,利用MATLAB 2022a实现了从不稳定到稳定状态的转变,并输出了相应的动画和收敛过程。模糊控制器通过对小车位置与摆的角度误差及其变化量进行模糊化处理,依据预设的模糊规则库进行模糊推理并最终去模糊化为精确的控制量,成功地使倒立摆维持在直立位置。该方法无需精确数学模型,适用于处理系统的非线性和不确定性。
基于模糊控制算法的倒立摆控制系统matlab仿真