当前位置: 首页 > article >正文

【深度学习入门_机器学习理论】梯度提升决策树(GBDT)

梯度提升决策树是一种集成技术,通过结合多个基础学习器(通常是决策树)的预测,生成一个强大的模型。与传统的提升方法不同,GBDT通过添加新的树来优化损失函数,这些新的树修正了之前树所犯的错误。这种顺序学习方法使模型能够捕捉到数据中的复杂模式。

一、梯度提升决策树(GBDT)定义

GBDT(Gradient Boosting Decision Tree),全名叫梯度提升决策树,是一种迭代的决策树算法,它通过构造一组弱的学习器(树),并把多颗决策树的结果累加起来作为最终的预测输出。该算法将决策树与集成思想进行了有效的结合。

GBDT顾名思义由两个部分组成,即梯度提升(Gradient Boosting)和决策树(Decision Tree),二者相互取长补短,得到更强的学习器。单棵决策树易于理解、可解释性强、预测速度快,然而容易出现过拟合现象,可以通过抑制决策树的复杂性,降低单棵决策树的拟合能力,再通过梯度提升的方法集成多棵决策树,以便较好地解决过拟合的问题。

GBDT的核心思想是:先产生一个弱学习器,训练后得到输入样本的残差,然后再产生一个弱学习器,基于上一轮的残差进行训练,不断迭代,最后加权组合所有的弱学习器得到强学习器

1.1 Boosting核心思想

Boosting方法训练基分类器时采用串行的方式,各个基分类器之间有依赖。它的基本思路是将基分类器层层叠加,每一层在训练的时候,对前一层基分类器分错的样本,给予更高的权重。测试时,根据各层分类器的结果的加权得到最终结果。
在这里插入图片描述

Bagging 与 Boosting 的串行训练方式不同,Bagging 方法在训练过程中,各基分类器之间无强依赖,可以进行并行训练。

二、GBDT原理与公式

2.1 原理

梯度提升的基本原理是逐步构建模型,每个模型试图修正之前模型的错误。具体来说,每个新模型都被训练用来预测当前模型集成的残差(误差)。

  • 所有弱分类器的结果相加等于预测值。
  • 每次都以当前预测为基准,下一个弱分类器去拟合误差函数对预测值的残差(预测值与真实值之间的误差)。
  • GBDT的弱分类器使用的是树模型。

在这里插入图片描述

如图我们用 GBDT 去预测一个30岁的年龄:

第一个弱分类器(第一棵树)预测一个20岁,计算发现误差有10岁;
第二棵树预测拟合残差,预测值 6岁,计算发现差距还有 4 岁;
第三棵树继续预测拟合残差,预测值 3岁,发现差距只有1岁了;
第四课树用1岁拟合剩下的残差,完成。
最终,四棵树的结论加起来,得到30岁这个标注答案(实际工程实现里,GBDT 是计算负梯度,用负梯度近似残差)。

2.2 形式化定义

在这里插入图片描述

2.3 损失函数

GBDT中常用的损失函数包括回归和分类两种,即:
在这里插入图片描述

换一种写法更好理解,回归任务下,GBDT在每一轮的迭代时对每个样本都会有一个预测值,此时的损失函数为均方差损失函数:
在这里插入图片描述

损失函数的负梯度计算如下:

在这里插入图片描述

可以看出,当损失函数选用「均方误差损失」时,每一次拟合的值就是(真实值-预测值),即残差。

三、GBDT实现流程

可以看一下其具体实现的流程如下图所示:

在这里插入图片描述

3.1 GBDT 训练过程

我们来借助1个简单的例子理解一下 GBDT 的训练过程。假定训练集只有4个人(A,B,C,D):
A:高一学生,14岁
B:高三学生,16岁
C:应届毕业生,24岁
D:工作两年的员工,26岁

我们先看看用回归树来训练,得到的结果如下图所示:
在这里插入图片描述
接下来改用 GBDT 来训练。由于样本数据少,我们限定叶子节点最多为2(即每棵树都只有一个分枝),并且限定树的棵树为2。最终训练得到的结果如下图所示:
在这里插入图片描述
上图中的树很好理解:A、B年龄较为相近,C、D年龄较为相近,被分为左右两支,每支用平均年龄作为预测值。

  • 我们计算残差(即「实际值」-「预测值」),所以A的残差14-15=-1。
  • 这里 A 的「预测值」是指前面所有树预测结果累加的和,在当前情形下前序只有一棵树,所以直接是15,其他多树的复杂场景下需要累加计算作为A的预测值。

至此,GBDT 学习到的回归树中还存在有一定的残差:

  • A=-1
  • B=1
  • C=-1
  • D=1

接下来 GBDT 会继续针对这些残差进行学习:

在这里插入图片描述
上图中的树就是残差学习的过程了:

  • 把A、B、C、D的值换作残差-1、1、-1、1,再构建一棵树学习,这棵树只有两个值 1 和 -1,直接分成两个节点:A、C在左边,B、D在右边。
  • 这棵树学习残差,在我们当前这个简单的场景下,已经能保证此时的残差为0。
  • 我们把这棵树的预测值累加到第一棵树上的预测结果上,就能得到真实年龄,这个简单例子中每个人都完美匹配,得到了真实的预测值:

在这里插入图片描述
最终的预测过程是这样的:

  • A:高一学生,购物较少,经常问学长问题,真实年龄14岁,预测年龄A=15-1=14
  • B:高三学生,购物较少,经常被学弟提问,真实年龄16岁,预测年龄B=15+1=16
  • C:应届毕业生,购物较多,经常问学长问题,真实年龄24岁,预测年龄C=25-1=24
  • D:工作两年员工,购物较多,经常被学弟提问,真实年龄26岁,预测年龄D=25+1=26

综上,GBDT 需要将多棵树的得分累加得到最终的预测得分,且每轮迭代,都是在现有树的基础上,增加一棵新的树去拟合前面树的预测值与真实值之间的残差。

3.2 梯度提升 vs 梯度下降

下面我们来对比一下「梯度提升」与「梯度下降」。这两种迭代优化算法,都是在每1轮迭代中,利用损失函数负梯度方向的信息,更新当前模型,只不过:

  • 梯度下降中,模型是以参数化形式表示,从而模型的更新等价于参数的更新。
  • 梯度提升中,模型并不需要进行参数化表示,而是直接定义在函数空间中,从而大大扩展了可以使用的模型种类。
    在这里插入图片描述

3.3 思考:回归树与GBDT得到的结果是相同的,那么为什么还要使用GBDT呢?

主要原因就是:防止模型过拟合

在训练精度和实际精度(或测试精度)之间,后者才是我们想要真正得到的。在上述的实例中,回归树算法为了达到100%精度,使用了3个 feature(上网时长、时段、网购金额),其中分枝【上网时长 > 1.1 h】很显然已经过拟合了,在这个数据集上 A , B 也许恰好【A每天上网 1.09 h,B上网 1.05 h】,但用【上网时长 > 1.1 h】来判断所有人的年龄很显然是有悖常识的。而GBDT算法只用了2个feature就搞定了,后一个feature是问答比例,显然GBDT算法更靠谱。Boosting的最大好处在于,每一步的残差计算其实变相地增大了分错样本的权重,而已经分对的样本则都趋向于0。这样后面的树就能越来越专注那些前面被分错的样本。

四、GBDT优缺点

1)优点

  • 预测阶段,因为每棵树的结构都已确定,可并行化计算,计算速度快。
  • 适用稠密数据,泛化能力和表达能力都不错,数据科学竞赛榜首常见模型。
  • 可解释性不错,鲁棒性亦可,能够自动发现特征间的高阶关系。

2)缺点

  • GBDT 在高维稀疏的数据集上,效率较差,且效果表现不如 SVM 或神经网络。
  • 适合数值型特征,在 NLP 或文本特征上表现弱。
  • 训练过程无法并行,工程加速只能体现在单颗树构建过程中。

附带一个随机森林算法与GBDT算法区别:
在这里插入图片描述

原文地址:https://blog.csdn.net/qq_35312463/article/details/146439514
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/596822.html

相关文章:

  • 【算法学习之路】13.BFS
  • 【go】如何处理可选配置
  • CSS 中@media查询的工作原理,如何利用它实现不同设备的样式适配
  • 大数据平台上的数据建模与分析:从数据到决策的跃迁
  • 旋转编码器
  • 基于随机森林回归预测葡萄酒质量
  • OpenCV中的矩阵操作
  • OSASIS(One-Shot Structure-Aware Stylized Image Synthesis)
  • 计算机网络性能优化相关内容详解
  • JavaScript基础-API 和 Web API
  • QT笔记----QCheckBox
  • 零、ubuntu20.04 安装 anaconda
  • 100道C#高频经典面试题及答案解析:C#程序员面试题库分类总结
  • 《通用去条纹算法:兼容自然图像与荧光图像的频域滤波方法》
  • 适配器模式 (Adapter Pattern)
  • 通俗一点介绍什么是场外期权交易 ?
  • 自动化测试框架pytest+requests+allure
  • 9.使用库
  • Android开源库——Glide
  • Eclipse 快捷键