决策树之 GBDT 算法 - 回归部分

GBDT(Gradient Boosting Decision Tree)是被工业界广泛使用的机器学习算法之一,它既可以解决回归问题,又可以应用在分类场景中,该算法由斯坦福统计学教授 Jerome H. Friedman 在 1999 年发表。本文中,我们主要学习 GBDT 的回归部分。

在学习 GBDT 之前,你需要对 CART、AdaBoost 决策树有所了解,和 AdaBoost 类似,GBDT 也是一种 Boosting 类型的决策树,即在算法产生的众多树中,前一棵树的错误决定了后一棵树的生成。

我们先从最为简单的例子开始,一起来学习 GBDT 是如何构造的,然后结合理论知识,对算法的每个细节进行剖析,力求由浅入深的掌握该算法。

我们的极简数据集由以下 3 条数据构成,使用它们来介绍 GBDT 的原理是再好不过了,假设我们用这些数据来构造一个 GBDT 模型,该模型的功能是:通过身高、颜色喜好、性别这 3 个特征来预测体重,很明显这是一个回归问题。

身高(米) 颜色喜好 性别 体重(kg)
1.6 Blue Male 88
1.6 Green Female 76
1.5 Blue Female 56
构造 GBDT 决策树
GBDT 的第一棵树只有 1 个叶子节点,该节点为所有样本的初始预测值,且该值到所有样本间的 MSE(Mean Squared Error)是最小的。实际上,初始值就是所有样本的平均值,即 (88+76+56)/3 = 73.3,原因我们在下文会详细介绍。

接下来,根据预测值,我们算出每个样本的残差(Residual),如第一个样本的残差为:88 - 73.3 = 14.7,所有样本的残差如下:

身高(米) 颜色喜好 性别 体重(kg) 残差
1.6 Blue Male 88 14.7
1.6 Green Female 76 2.7
1.5 Blue Female 56 -17.3
接着,我们以残差为目标值来构建一棵决策树,构造方式同 CART 决策树,这里你可能会问到为什么要预测残差?原因我们马上就会知道,产生的树如下:

因为我们只有 3 个样本,且为了保留算法的细节,这里只用了 2 个叶子节点,但实际工作中,GBDT 的叶子节点通常在 8-32 个之间。

然后我们要处理有多个预测值的叶子节点,取它们的平均值作为该节点的输出,如下:

上面这棵树便是第 2 棵树,聪明的你一定发现了,第 2 棵树实际上是第 1 棵树和样本之间的误差,我们拿第 3 个样本作为例子,第一棵树对该样本的预测值为 73.3,此时它和目标值 56 之间的误差为 -17.3,把该样本输入到第 2 棵树,由于她的身高值为 1.5,小于 1.55,她将被预测为 -17.3。

既然后一棵树的输出是前一棵树的误差,那只要把所有的树都加起来,是不是就可以对前面树的错误做出补偿,从而达到逼近真实值的目的呢。这就是我们为什么以残差建树的原因。

当然树之间不会直接相加,而是在求和之前,乘上一个学习率,如 0.1,这样我们每次都可以在正确的方向上,把误差缩小一点点。Jerome Friedman 也说过这么做有助于提升模型的泛化能力(low variance)。

整个过程有点像梯度下降,这应该也是 GBDT 中 Gradient 的来历。GBDT 的预测过程如下图所示:

按此方法更新上述 3 个样本的预测值和残差,如下:

样本 目标值 预测值 残差
1 88 73.3 + 0.1 × 8.7 = 74.17 13.83
2 76 73.3 + 0.1 × 8.7 = 74.17 1.83
3 56 73.3 + 0.1 × (-17.3) = 71.57 -15.57
比较这两棵树的残差:

样本 树1的残差 树2的残差
1 14.7 13.83
2 2.7 1.83
3 -17.3 -15.57
可见,通过 2 棵树预测的样本比只用 1 棵树更接近目标值。接下来,我们再使用第 2 棵树的残差来构建第 3 棵树,用第 3 棵树的残差来构建第 4 棵树,如此循环下去,直到树的棵数满足预设条件,或总残差小于一定阈值为止。以上,就是 GBDT 回归树的原理。

深入 GBDT 算法细节
GBDT 从名字上给人一种不明觉厉的印象,但从上文可以看出,它的思想还是非常直观的。对于只想了解其原理的同学,至此已经足够了,想学习更多细节的同学,可以继续往下阅读。

初始化模型
该算法主要分为两个步骤,第一步为初始化模型:

F0(x)=arg⁡minγ∑i=1nL(yi,γ)

上式中,FFF 表示模型,F0F_0F0 即模型初始状态;L 为 Loss Function,n 为训练样本的个数,yiy_iyi 为样本 i 的目标值,gamma 为初始化的预测值,意为找一个 gamma,能使所有样本的 Loss 最小。

前文提过,GBDT 回归算法使用 MSE 作为其 Loss,即:

L(yi,yi)=12(yi−yi)2

公式中 yi^\hat{y_i}yi^ 表示第 i 个样本的预测值,我们把例子中的 3 个样本带入 F0F_0F0 中,得:

F0(x)=12(88−γ)2+12(76−γ)2+12(56−γ)2

要找到一个 gamma,使上式最小,因为上式是一个抛物线,那么 d(F0)/dγ=0d(F_0)/d\gamma=0d(F0)/dγ=0 时,上式有最小值,于是:

d(F0)dγ=(γ−88)+(γ−76)+(γ−56)=0

上式化简后,你一眼就可以看出 gamma = (88+76+56)/3 = 73.3,即初始值就是所有样本的平均值,

模型迭代
算法的第二个步骤是一个循环,伪代码如下:

for m = 1 to M:
(A)
(B)
©
(D)
其中,m 表示树的序号,M 为树的总个数(通常该值设为 100 或更多),(A) (B) © (D) 代表每次循环中的 4 个子步骤,我们先来看 (A)

(A) 计算

rim=−[∂L(yi,F(xi))∂F(xi)]F(x)=Fm−1(x)

我们把 F(xi)F(x_i)F(xi) 换成 yi^\hat{y_i}yi^,该式子其实是对 Loss 求 yi^\hat{y_i}yi^ 的偏微分,该偏微分为:

∂L(yi,yi)∂yi=∂12(yi−yi)2∂yi=−(yi−yi^)

F(x)=Fm−1(x)F(x)=F_{m-1}(x)F(x)=Fm1(x) 意为使用上一个模型来计算 yi^\hat{y_i}yi^,即用 m-1 棵已生成的树来预测每一个样本,那么 rim=yi−yi^r_{im} = y_i-\hat{y_i}rim=yiyi^ 就是上面说的计算残差这一步。

(B) 使用回归决策树来拟合残差 rimr_{im}rim,树的叶子节点标记为 RjmR_{jm}Rjm,其中 j 表示第 j 个叶子节点,m 表示第 m 棵树。该步骤的细节如果不清楚可以查看 CART 回归树一文。

© 对每个叶子节点,计算

γjm=arg⁡minγ∑xi∈RijL(yi,Fm−1(xi)+γ)

上面式子虽然较为复杂,但它和初始化步骤中的式子的目的是一样的,即在每个叶子节点中,找到一个输出值 gamma,使得整个叶子节点的 Loss 最小。

γjm\gamma_{jm}γjm 为第 m 棵树中,第 j 个叶子节点的输出,∑xi∈RijL\sum_{x_i \in R_{ij}}LxiRijL 表示在第 j 个叶子节点中所有样本的 Loss,如下面的树中,左边叶子节点上有 1 个样本,而右边叶子节点内有 2 个样本,我们希望根据这些样本来求得对应叶子的唯一输出,而 Loss 最小化就是解决之道。

在 Loss 函数中,第 2 个参数 Fm−1(xi)+γF_{m-1}(x_i) + \gammaFm1(xi)+γ 是模型对样本 i 的预测,再加上 γ\gammaγ,对于只有 1 个样本的叶子节点来说,γ\gammaγ 就是该样本残差,而对于有多个样本的节点来说,γ\gammaγ 为能使 Loss 最小的那个值,下面就这两种情况分别说明:

以上面这棵树为例,左边叶子节点只有 1 个样本,即样本 3,将它带入到公式中:

γ11=arg⁡minγL(y3,F0(x3)+γ)=arg⁡minγ(12(56−(73.3+γ))2)=arg⁡minγ(12(−17.3−γ)2)

要求右边的式子最小,和上面一样,我们令其导数为 0:

ddγ[12(−17.3−γ)2]=17.3+γ=0

算得 γ11=−17.3\gamma_{11} = -17.3γ11=17.3,所以当叶子中只有 1 个样本时,该叶子的输出就是其残差。

再来看下右边这个节点,其中包含 2 个样本,同样把样本 1 和样本 2 带入到公式中,得:

γ21=arg⁡minγ(L(y1,F0(x1)+γ)+L(y2,F0(x2)+γ))=arg⁡minγ(12(88−(73.3+γ))2+12(76−(73.3+γ))2)=arg⁡minγ(12(14.7−γ)2+12(2.7−γ)2)

对右边求导:

ddγ[12(14.7−γ)2+12(2.7−γ)2)]=γ−14.7+γ−2.7

上式为 0 时,Loss 最小,即

γ−14.7+γ−2.7=0

于是

γ=14.7+2.72=8.7

可见,当叶子中有多个样本时,该叶子的输出值就是所有样本残差的平均值。

(D) 更新模型,下次迭代中使用 m 棵树来做预测:

Fm(x)=Fm−1(x)+ν∑j=1Jmγjm

上式中,ν\nuν 表示学习率。之后,训练将重新来到 (A) 步骤,进入下一棵树构建的循环中。

总结
本文我们一起学习了 GBDT 的回归算法,一开始,通过一个简单的例子描述了 GBDT 的原理,之后,我们对 GBDT 的每个步骤进行了逐一剖析,希望本文能给你带来收获。

原文链接
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514534.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

广技师17专插本c语言答案,广东技术师范学院2017年专插本C语言程序设计(1)

1、广东技术师范学院2017 年专插本 C语言程序设计注意:请将答案写在答题纸上,否则无效!一、判断题: (12 分每题 2 分)1、 C 语言规定 :在一个源程序中 ,main 函数的位置必须在最开始。2、假设所有变量均为整型,则表达式 (a2,b5,b,…

深度强化学习在时序数据压缩中的应用--ICDE 2020收录论文

彼节者有间,而刀刃者无厚;以无厚入有间,恢恢乎其于游刃必有余地矣 ----- 庖丁解牛 前言:随着移动互联网、IoT、5G等的应用和普及,一步一步地我们走进了数字经济时代。随之而来的海量数据将是一种客观的存在&#xff0…

技术干货 | mPaaS 框架下如何使用 Crash SDK 对闪退进行分析?

简介: Android Native Crash 处理案例分享 目前 mPaaS Android 是使用的是 Crash SDK 对闪退进行的处理,Crash SDK 是 Android 平台上一款功能强大的崩溃日志收集 SDK,有着极高的崩溃收集率和完整、全面的崩溃日志信息,生成的日志…

山石网科蒋东毅:网络连接矩阵复杂化,传统安全防护框架需重构

编辑 | 宋慧 供稿 | 山石网科 头图 | 蒋东毅在 ISC 2021主题论坛发表演讲 7月28日上午,在ISC 2021 第九届互联网安全大会主题论坛上,山石网科高级副总裁、首席战略官(CSO)蒋东毅带来了一场主题为《政企安全面临的多重挑战和未来趋…

如何使用java来实现windows系统关机

可以使用Java代码来调用操作系统的命令行来实现Windows关机操作。具体步骤如下: import java.io.IOException;public class ShutdownWindows {public static void main(String[] args) {try {// 调用命令行执行关机命令Process process Runtime.getRuntime().exec…

设树采用孩子兄弟表示法存放.用类c语言设计算法计算树的高度.,(数据结构课程设计分类题目.doc...

(数据结构课程设计分类题目线性表顺序表:1、设有一元素为整数的线性表L(a1,a2,a3,…,an),存放在一维数组A[N]中,设计一个算法,以表中an作为参考元素,将该表分为左、右两部分,其中左半部分每个元素小于等于an,右半部分每个元素都大于an, an位于分界位置上(要求结果仍…

双11“新贵”红星美凯龙:数据中台充分给足转型马力

今年“天猫双11”全球狂欢季,让双11新手红星美凯龙刷足了存在感。从去年首度试水双11,到拿下今年618天猫超级晚、“天猫双11狂欢夜”两大S级总冠名,红星美凯龙通过线上玩法频频出圈,成为中国企业化数字化转型、数字化用户运营的创新样本。 红星美凯龙董事长车建新指出:红星美凯…

CDN应用进阶 | 正确使用CDN 让你更好规避安全风险

为了帮助用户更好地了解和使用CDN产品,CDN应用实践进阶系统课程开课了。12月17日,阿里云CDN产品专家彭飞在线分享了《正确使用CDN,让你更好规避安全风险》议题,内容主要包括以下几个方面: 使用CDN的常见误区和问题有哪…

“程序员千万不要选全栈开发”

作者 | 千鸟(网名) 小路助手开发者责编 | 晋兆雨出品 | CSDN(ID:CSDNnews)对于大多数人来说,大学毕业后选择一家满意的公司,一路升职加薪才是正解,但他却偏偏选择了一条鲜有人知的…

「直播回顾」Mars:加速数据科学的新方式

简介: 本文从数据科学概念、背景和现状切入,引出加速数据科学的新方式Mars,并介绍了Mars具体能解决的一些问题和背后的逻辑、哲学,同时对Mars整体数据处理流程进行了介绍。 本文分为4个部分: Mars的背景和现状 Mars解…

围观|第一代云原生企业米哈游如何让想象发生?

作者 | 贾宁宇 来源|阿里巴巴云原生公众号 在米哈游的办公区,有一间会议室,专门留给了阿里云工程师。 今年,是这家二次元文化公司创立的第九年,米哈游和阿里云的交情,也有八年了。 米哈游总裁刘伟还记得多年前&…

作为一名通信老司机,我是如何看待翼龙通信无人机救灾的?

作者:小枣君来源:鲜枣课堂昨天,关于翼龙无人机救灾的新闻,刷屏了整个网络。由国家应急管理部紧急调派的翼龙-2H应急救灾型无人机,搭载中国移动的基站设备,从贵州安顺出发,连续出动两次&#xff…

揭秘大流量场景下发布如「丝般顺滑」背后的原因

为什么很多互联网公司不敢在白天发布,都选择在半夜发布。要是能摆脱半夜发布的窘境,它不香吗?选择在半夜发布无非是为了减少对用户的影响,出了问题影响面可控。 那我们就来谈谈,发布会有哪些问题。 若您的应用没有上…

Serverless 落地之痛怎么解?

传统业务在开发上线的过程中,需要团队合作,每个人开发一部分,合并代码,开发联调,然后进行资源评估,测试环境搭建、线上环境搭建、测试上线、运维。但是在 Serverless 时代下,开发者只需要开发自…

可信云十年,重磅研究成果与2021云计算十大关键词悉数发布

编辑 | 宋慧 出品 | CSDN云计算 头图 | 2021可信云大会现场 可信云从提出到发展至今,已经历经了十个年头,可信云大会也已举办到第八届。2021年7月27-28日,由中国信息通信研究院、中国通信标准化协会联合主办的“2021可信云大会”盛大开幕&am…

「直播回顾」Mars应用与最佳实践

简介: 本文首先对Mars的概念、功能、优势进行了介绍,随后,对Mars几个典型的应用场景进行介绍,并通过两个Demo展示了在使用Mars后数据科学性能的提升,最后总结了Mars的最佳实践,让使用Mars更高效便捷。 本文…

TechWorld2021技术嘉年华,解锁“不一样”的技术盛会

当今,网络空间和物理空间的边界不断融合,网络安全和信息化作为一体之两翼也在进行一种融合,网络安全产业伴随着“融合”持续升级发展。7月30日 ,以“融合•Convergency”为主题的TechWorld2021绿盟科技技术嘉年华在北京顺利召开&a…

《资源成本双优化!看 Serverless 颠覆编程教育的创新实践》

简介: 说起 Serverless 这个词,我想大家应该都不陌生,那么 Serverless 这个词到底是什么意思?Serverless 到底能解决什么问题?可能很多朋友还没有深刻的体会和体感,这篇文章我就和大家一起聊聊 Serverless。…

为了让盲人也能追剧,优酷做了哪些努力?

简介: 虽然Android和iOS系统本身就有对无障碍技术的官方支持,但是随着各种技术的迭代和演进,以及页面内容的复杂度的增加,靠系统自身的支持已经远远无法达到理想的无障碍用户体验。优酷客户端针对视障群体实际需求及反馈进行梳理&…

统信软件启用全新LOGO,迎接中国操作系统大时代

编辑 | 宋慧 出品 | CSDN云计算 头图 | 统信软件发布会现场 在2020年底完成11亿元A轮融资的半年之后,统信软件在7月31日发布了全新品牌LOGO,并推出了200多项功能改进的统信UOS1040版本。 统信软件技术有限公司总经理刘闻欢表示,统信软件从成…