在没有技术术语的情况下介绍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。

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

目录
相关文章
|
5天前
|
机器学习/深度学习 自然语言处理 算法
机器学习算法原理与应用:深入探索与实战
【5月更文挑战第2天】本文深入探讨机器学习算法原理,包括监督学习(如线性回归、SVM、神经网络)、非监督学习(聚类、PCA)和强化学习。通过案例展示了机器学习在图像识别(CNN)、自然语言处理(RNN/LSTM)和推荐系统(协同过滤)的应用。随着技术发展,机器学习正广泛影响各领域,但也带来隐私和算法偏见问题,需关注解决。
|
6天前
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习专栏】层次聚类算法的原理与应用
【4月更文挑战第30天】层次聚类是数据挖掘中的聚类技术,无需预设簇数量,能生成数据的层次结构。分为凝聚(自下而上)和分裂(自上而下)两类,常用凝聚层次聚类有最短/最长距离、群集平均和Ward方法。优点是自动确定簇数、提供层次结构,适合小到中型数据集;缺点是计算成本高、过程不可逆且对异常值敏感。在Python中可使用`scipy.cluster.hierarchy`进行实现。尽管有局限,层次聚类仍是各领域强大的分析工具。
|
6天前
|
机器学习/深度学习 算法 前端开发
【Python机器学习专栏】集成学习算法的原理与应用
【4月更文挑战第30天】集成学习通过组合多个基学习器提升预测准确性,广泛应用于分类、回归等问题。主要步骤包括生成基学习器、训练和结合预测结果。算法类型有Bagging(如随机森林)、Boosting(如AdaBoost)和Stacking。Python中可使用scikit-learn实现,如示例代码展示的随机森林分类。集成学习能降低模型方差,缓解过拟合,提高预测性能。
|
6天前
|
JavaScript 前端开发 算法
【JavaScript技术专栏】使用JavaScript实现常见算法
【4月更文挑战第30天】本文介绍了如何使用JavaScript实现常见算法,包括排序、搜索和图算法。首先,通过JavaScript的`sort`方法讨论了排序算法,以快速排序为例展示了自定义排序的实现。接着,探讨了二分查找这一高效的搜索算法,并提供了实现代码。最后,解释了深度优先搜索(DFS)图算法,并给出了在JavaScript中的实现。理解并运用这些算法能有效提升编程能力。
|
7天前
|
机器学习/深度学习 算法 数据挖掘
【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例(下)
【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例(下)
|
7天前
|
机器学习/深度学习 算法 搜索推荐
【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例(上)
【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例
|
8天前
|
机器学习/深度学习 监控 算法
|
9天前
|
机器学习/深度学习 数据采集 人工智能
【热门话题】AI作画算法原理解析
本文解析了AI作画算法的原理,介绍了基于机器学习和深度学习的CNNs及GANs在艺术创作中的应用。从数据预处理到模型训练、优化,再到风格迁移、图像合成等实际应用,阐述了AI如何生成艺术作品。同时,文章指出未来发展中面临的版权、伦理等问题,强调理解这些算法对于探索艺术新境地的重要性。
26 3
|
16天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。
|
3天前
|
存储 算法
m基于LDPC编译码的matlab误码率仿真,对比SP,MS,NMS以及OMS四种译码算法
MATLAB 2022a仿真实现了LDPC译码算法比较,包括Sum-Product (SP),Min-Sum (MS),Normalized Min-Sum (NMS)和Offset Min-Sum (OMS)。四种算法在不同通信场景有各自优势:SP最准确但计算复杂度高;MS计算复杂度最低但性能略逊;NMS通过归一化提升低SNR性能;OMS引入偏置优化高SNR表现。适用于资源有限或高性能需求的场景。提供的MATLAB代码用于仿真并绘制不同SNR下的误码率曲线。
136 3