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

   日期:2020-07-09     浏览:89    评论:0    
核心提示:这篇文章将不使用任何的术语介绍每个提升算法如何决定每棵树的票数。通过理解这些算法是如何工作的,我们将了解什么时候使用哪种工具。提升家庭有三名成员。它们是Adaptive Boosting(自适应提升)、Gradient Boosting(梯度提升)和XG Boosting.(极端梯度提升)。它将按顺序进行讨论。AdaboostAdaboost只用一个因素来判断一棵树的好坏——它的准确性。然而,这里有一个狡猾的转折。每棵树都由一组稍有不同的样本进行训练。所以?假设你正在准备SAT考试,考试分为四个部分

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

提升家庭有三名成员。它们是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)。以下是建立森林的步骤:

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

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

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

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

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

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

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

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

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

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

Gradientboost

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

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

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

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

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

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

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

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

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

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

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

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

为什么我们还需要XGboost?

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

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

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

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

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

本文作者:Linda Chen

deephub翻译组

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服