GBDT 算法的原理推导

GBDT的全称为梯度提升决策树(gradient boosting decision tree),其基模型(弱分类器)为CART决策树,针对分类问题的基模型为二叉分类树,对应梯度提升模型就叫GBDT;针对回归问题的基模型为二叉回归树,对应的梯度提升模型叫做GBRT(gradient boosting regression tree)。

我们先来用一个通俗的说法来理解GBDT。假设某人月薪10k,我们首先用一个树模型拟合了6k,发现有4k的损失,然后再用一棵树模型拟合了2k,这样持续拟合下去,拟合值和目标值之间的残差会越来越小。将每一轮迭代,也就是每一棵树的预测值加起来,就是模型最终的预测结果。使用多棵决策树组合就是提升树模型,使用梯度下降法对提升树模型进行优化的过程就是梯度提升树模型。

一个提升树模型的数学表达式为:
f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) (11-1) f_M(x) = \sum_{m=1}^{M} T(x; \varTheta_m) \tag{11-1} fM(x)=m=1MT(x;Θm)(11-1)

其中 T ( x ; Θ m ) T(x; \varTheta_m) T(x;Θm)为决策树表示的基模型, Θ m \varTheta_m Θm为决策树参数, M M M为决策树棵数。

当确定初始提升树模型 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0时,第 m m m的模型表示为:
f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) (11-2) f_m(x) = f_{m-1}(x) + T(x; \varTheta_m) \tag{11-2} fm(x)=fm1(x)+T(x;Θm)(11-2)

其中 f m − 1 ( x ) f_{m-1}(x) fm1(x)为当前迭代模型,根据前向分步算法,可以使用经验风险最小化来确定下一棵决策树的参数 Θ m \varTheta_m Θm
Θ ^ m = arg ⁡ min ⁡ Θ m ∑ i = 1 N L ( y i , f m − 1 ( x i ) + T ( x i ; Θ m ) ) (11-3) \hat{\varTheta}_m = \arg\min_{\varTheta_m} \sum_{i=1}^N L(y_i, f_{m-1}(x_i) + T(x_i; \varTheta_m)) \tag{11-3} Θ^m=argΘmmini=1NL(yi,fm1(xi)+T(xi;Θm))(11-3)

以梯度提升回归树为例,一棵回归树可以表示为:
T ( x ; Θ ) = ∑ k = 1 K c k I ( x ∈ R j ) (11-4) T(x; \varTheta) = \sum_{k=1}^K c_k I(x \in R_j) \tag{11-4} T(x;Θ)=k=1KckI(xRj)(11-4)

根据加性模型,第0步、第 m m m步和最终模型可以表示为:
f 0 ( x ) = 0 (11-5) f_0(x) = 0 \tag{11-5} f0(x)=0(11-5)

f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) (11-6) f_m(x) = f_{m-1}(x) + T(x; \varTheta_m) \tag{11-6} fm(x)=fm1(x)+T(x;Θm)(11-6)

f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) (11-7) f_M(x) = \sum_{m=1}^{M} T(x; \varTheta_m) \tag{11-7} fM(x)=m=1MT(x;Θm)(11-7)

在已知 f m − 1 ( x ) f_{m-1}(x) fm1(x)的情况下,求解式(11-3)可得到当前迭代步的模型参数。假设回归树的损失函数为平方损失:
L ( y , f ( x ) ) = ( y − f ( x ) ) 2 (11-8) L(y, f(x)) = (y - f(x))^2 \tag{11-8} L(y,f(x))=(yf(x))2(11-8)

对应到GBRT中,损失可推导为:
L ( y , f m − 1 ( x ) + T ( x ; Θ m ) ) = [ y − f m − 1 ( x ) − T ( x ; Θ m ) ] 2 (11-9) L(y, f_{m-1}(x) + T(x; \varTheta_m)) = [y - f_{m-1}(x) - T(x; \varTheta_m)]^2 \tag{11-9} L(y,fm1(x)+T(x;Θm))=[yfm1(x)T(x;Θm)]2(11-9)

令:
r = y − f m − 1 ( x ) (11-10) r = y - f_{m-1}(x) \tag{11-10} r=yfm1(x)(11-10)

所以式(11-9)可表示为:
L ( y , f m − 1 ( x ) + T ( x ; Θ m ) ) = [ r − T ( x ; Θ m ) ] 2 (11-11) L(y, f_{m-1}(x) + T(x; \varTheta_m)) = [r - T(x; \varTheta_m)]^2 \tag{11-11} L(y,fm1(x)+T(x;Θm))=[rT(x;Θm)]2(11-11)

正如本节开头的例子,提升树模型每一次迭代都是在拟合一个残差函数。当损失函数如本例中的均方损失一样时,式(11-3)是容易求解的。但大多数情况下,一般损失函数很难直接优化求解,因而就有了基于负梯度求解提升树模型的梯度提升树模型。梯度提升树以梯度下降的方法,使用损失函数的负梯度在当前模型的值作为回归提升树中残差的近似值:
r m i = − [ ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) (11-12) r_{mi} = -\left[\frac{\partial L(y_i, f(x_i))}{\partial f(x_i)}\right]_{f(x)=f_{m-1}(x)} \tag{11-12} rmi=[f(xi)L(yi,f(xi))]f(x)=fm1(x)(11-12)

所以,综合提升树模型、前向分步算法和梯度提升,给定训练集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x N , y N ) } D=\{(x_1, y_1), (x_2, y_2), \cdots, (x_N, y_N)\} D={(x1,y1),(x2,y2),,(xN,yN)} x i ∈ X x_i \in X xiX y i ∈ Y ⊆ R n y_i \in Y \subseteq \mathbb{R}^n yiYRn,GBDT算法的一般流程可归纳为如下步骤。

(1) 初始化提升树模型:
f 0 ( x ) = arg ⁡ min ⁡ c ∑ i = 1 N L ( y i , c ) (11-13) f_0(x) = \arg\min_c \sum_{i=1}^N L(y_i, c) \tag{11-13} f0(x)=argcmini=1NL(yi,c)(11-13)

(2) 对 m = 1 , 2 , ⋯ , M m=1, 2, \cdots, M m=1,2,,M,有

(a) 对每个样本 i = 1 , 2 , ⋯ , N i=1, 2, \cdots, N i=1,2,,N,计算负梯度拟合的残差:
r m i = − [ ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) (11-14) r_{mi} = -\left[\frac{\partial L(y_i, f(x_i))}{\partial f(x_i)}\right]_{f(x)=f_{m-1}(x)} \tag{11-14} rmi=[f(xi)L(yi,f(xi))]f(x)=fm1(x)(11-14)

(b) 将上一步得到的残差作为样本新的真实值,并将数据 ( x i , r m i ) (x_i, r_{mi}) (xi,rmi) i = 1 , 2 , ⋯ , N i=1, 2, \cdots, N i=1,2,,N作为下一颗树的训练数据,得到一棵新的回归树 f m ( x ) f_m(x) fm(x),其对应的叶子结点区域为 R m j R_{mj} Rmj j = 1 , 2 , ⋯ , J j=1, 2, \cdots, J j=1,2,,J。其中 J J J为回归树 T T T的叶子结点的个数。

© 对叶子区域 j = 1 , 2 , ⋯ , J j=1, 2, \cdots, J j=1,2,,J计算最优拟合值:
c m j = arg ⁡ min ⁡ c ∑ x i ∈ R m j L ( y i , f m − 1 ( x i ) + c ) (11-15) c_{mj} = \arg\min_c \sum_{x_i \in R_{mj}} L(y_i, f_{m-1}(x_i) + c) \tag{11-15} cmj=argcminxiRmjL(yi,fm1(xi)+c)(11-15)

(d) 更新提升树模型:
f m ( x ) = f m − 1 ( x ) + ∑ j = 1 J c m j I ( x ∈ R m j ) (11-16) f_m(x) = f_{m-1}(x) + \sum_{j=1}^J c_{mj} I(x \in R_{mj}) \tag{11-16} fm(x)=fm1(x)+j=1JcmjI(xRmj)(11-16)

(3) 得到最后的梯度提升树:
f ( x ) = f M ( x ) = ∑ m = 1 M ∑ j = 1 J c m j I ( x ∈ R m j ) (11-17) f(x) = f_M(x) = \sum_{m=1}^M \sum_{j=1}^J c_{mj} I(x \in R_{mj}) \tag{11-17} f(x)=fM(x)=m=1Mj=1JcmjI(xRmj)(11-17)

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

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

相关文章

有效利用关键词研究工具提升网站流量的策略

内容概要 在当前信息泛滥的时代,关键词研究工具的重要性愈发突出。它们不仅能帮助我们识别和分析用户搜索行为,还能够精准地为网站内容定位,确保我们能够吸引并留住目标受众。关键词研究工具通过提供大量的数据,帮助站长和营销策…

探索全托的自闭症学校:打造个性化成长场所

文章详情:http://www.zibizhengwang.com/page35.html 在广州这座充满活力的城市里,有一个特别的地方,它以独特的教育理念和深切的关怀之心,为自闭症儿童提供了一个温暖的避风港。这个地方就是星贝育园自闭症儿童寄宿制学校&#…

使用RabbitMQ实现微服务间的异步消息传递

使用RabbitMQ实现微服务间的异步消息传递 RabbitMQ简介 安装RabbitMQ 在Ubuntu上安装RabbitMQ 在CentOS上安装RabbitMQ 配置RabbitMQ 创建微服务 生产者服务 安装依赖 生产者代码 消费者服务 消费者代码 运行微服务 消息模式 直接模式 生产者代码 消费者代码 扇出模式 生产…

Yolo V4详解

Yolo V4(You Only Look Once version 4)是一种先进的目标检测系统,于2020年推出。作为Yolo系列算法的最新版本,Yolo V4继承了其前代版本的优点,并在此基础上进行了多项改进,使得其性能得到了显著提升。本文…

Pandas数据结构之Series对象

文章目录 1. DataFrame对象1.1 创建DataFrame对象1.2 DataFrame对象常用属性和方法1.3 布尔值列表获取DataFrame对象中部分数据1.4 DataFrame对象的运算 1. DataFrame对象 DataFrame是一个表格型的结构化数据结构,它含有一组或多组有序的列(Series&…

Tomcat 11 下载/安装 与基本使用

为什么要使用Tomcat? 使用Apache Tomcat的原因有很多,以下是一些主要的优点和特点: 1. 开源与免费 Tomcat是一个完全开源的项目,任何人都可以免费使用。它由Apache软件基金会维护,拥有一个活跃的社区,这…

换热器换热面积计算

1 容积式水加热器换热面积计算 式中Q—设计小时耗热量(W) ε—由于水垢、热媒分布不均匀等影响传热效率的系数,一般采用0.8~0.6 K—传热系数[W/(m2ˑ℃)],K值对加热器换热影响很大,主要取决于热媒种类和压力、热媒和…

幸福宝宝起名器

这段代码是一个简单的“幸福宝宝取名器”网页应用&#xff0c;主要功能是根据用户输入的姓氏、性别和生成数量&#xff0c;随机生成宝宝的名字。以下是代码的主要组成部分和功能简介&#xff1a; 1. HTML 结构 - 文档类型和语言&#xff1a;使用 <!DOCTYPE html> 声明文…

BLG与T1谁会赢?python制作预测程序,结果显示,BLG将打败T1

决赛预测 2024英雄联盟全球总决赛 2024年英雄联盟全球总决赛&#xff0c;今天晚上&#xff08;2024年11月2日22点&#xff09;就要开始了&#xff01;今年的总决赛的队伍是BLG与T1。当然一些老的lol玩家&#xff0c;现在可能对于lol关注不多&#xff0c;并不清楚这两个队伍。…

Spring Boot 3.x 整合 Druid 数据库连接池(含密码加密)

Spring Boot 3.x 整合 Druid 数据库连接池&#xff08;含密码加密&#xff09; 1. 为什么需要数据库连接池&#xff1f; 在传统的数据库连接中&#xff0c;每一次与数据库连接都会消耗大量的系统资源和时间。数据库连接池会提前创建一定数量的数据库连接保存在池中&#xff0…

完美解决“找不到MSVCR110.dll无法继续执行代码

msvcr110.dll是一个动态链接库&#xff08;Dynamic Link Library&#xff0c;简称DLL&#xff09;文件&#xff0c;它是Microsoft Visual C 2012 Redistributable Package的一部分。这个库文件包含了大量预先编写的函数和资源&#xff0c;用于支持那些使用Visual C 2012或与之兼…

C++【string的模拟实现】

在前文我们讲解了string类接口使用&#xff08;C【string类的使用】(上),C【string类的使用】&#xff08;下&#xff09;&#xff09;&#xff0c;本片文章就来模拟实现string类。 注&#xff1a;本文实现的是string的部分重点内容&#xff0c;目的是为了更好的了解string&…

新能源汽车充电设施在储充电站的应用

0引言 全球能源和环境问题促使新能源汽车受到关注&#xff0c;但其推广受充电设施和能源供应限制。光伏站、储能站和电动汽车充放电站作为可再生能源利用和储存方式&#xff0c;具有巨大潜力。本研究旨在探索新能源汽车充电设施与这些站点的融合模式&#xff0c;以支持新能源汽…

uniapp开发小程序【简单的实现点击下拉选择性别功能】

一、展示效果 二、代码 <template><view><view class="form_box"><view class="item"

Git 基础详解

1. 基本概念 Git是一个免费、开源的 分布式版本控制系统&#xff0c;可以高效处理小到大型的各种项目。 1.1 版本控制 版本控制&#xff1a;它是一种用于追踪和记录文件、目录、项目或软件的变化&#xff0c;以便将来查阅、比较、修订不同版本文件的系统 版本控制系统&…

Yarn介绍 | 组成 | 工作流程

1、理论 Apache YARN&#xff08;Yet another Resource Negotiator的缩写&#xff09;是Hadoop集群的资源管理系统&#xff0c;负责为计算程序提供服务器计算资源&#xff0c;相当于一个分布式的操作系统平台&#xff0c;而MapReduce等计算程序则相当于运行于操作系统之上的应用…

uniapp开发【选择地址-省市区功能】,直接套用即可

一、效果展示 二、代码 <template><view><view class="user_info"><view class="item"

《Web性能权威指南》-WebRTC-读书笔记

本文是《Web性能权威指南》第四部分——WebRTC的读书笔记。 第一部分——网络技术概览&#xff0c;请参考网络技术概览&#xff1b; 第二部分——无线网络性能&#xff0c;请参考无线网络性能&#xff1b; 第三部分——HTTP&#xff0c;请参考HTTP&#xff1b; 第四部分——浏览…

高效水电管理:Spring Boot在大学城的应用

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理大学城水电管理系统的相关信息成为必然。开…

(linux驱动学习 - 12). IIC 驱动实验

目录 一.IIC 总线驱动相关结构体与函数 1.i2c_adapter 结构体 2.i2c_algorithm 结构体 3.向系统注册设置好的 i2c_adapter 结构体 - i2c_add_adapter 4.向系统注册设置好的 i2c_adapter 结构体 - i2c_add_numbered_adapter 5.删除 I2C 适配器 - i2c_del_adapter 二.IIC 设…