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 创建微服务 生产者服务 安装依赖 生产者代码 消费者服务 消费者代码 运行微服务 消息模式 直接模式 生产者代码 消费者代码 扇出模式 生产…

计算机低能儿从0刷leetcode | 31.下一个排列

题目:31. 下一个排列 思路: 本题中,我们需要寻找“下一个排列”,也就是要找到增长最小的排列。 因此我们应该从尽可能从靠右侧(末尾)的位置开始增长。想象我们从末尾开始遍历数组,会遇到第一…

.net core NPOI以及NOPI mapper

我们在日常开发中对Excel的操作可能会比较频繁,好多功能都会涉及到Excel的操作。在.Net Core中大家可能使用Npoi比较多,这款软件功能也十分强大,而且接近原始编程。但是直接使用Npoi大部分时候我们可能都会自己封装一下,毕竟根据二…

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> 声明文…

【数据结构与算法】LeetCode: 贪心算法

文章目录 LeetCode&#xff1a; 贪心算法买卖股票的最佳时机 &#xff08;Hot100&#xff09;买卖股票的最佳时机 II跳跃游戏 &#xff08;Hot100&#xff09;跳跃游戏 II&#xff08;Hot100&#xff09;划分字母区间 &#xff08;Hot100&#xff09;分发饼干K次取反后最大化的…

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…

麒麟V10SP1部署postgresql+postgis+pgrouting

1、查看当前操作系统版本&#xff1a; nkvers ############## Kylin Linux Version ################# Release: Kylin Linux Advanced Server release V10 (Tercel) Kernel: 4.19.90-17.5.ky10.aarch64 Build: Kylin Linux Advanced Server release V10 (SP1) /(Tercel)-…

Spring Boot框架在信息学科平台建设中的实用技巧

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于保密信息学科平台系统的开发全过程。通过分析基于保密信息学科平台系统管理的不足&#xff0c;创建了一个计算机管理基于保密信息学科平台系统的方案。文章介…

完美解决“找不到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&…

JS中计算时数据有误差解决方案

首先判断需要计算的数字是否为整数 // 判断一个数字是否为一个整数 export function isInt(num) {num Number(num);return Math.floor(num) num } 将一个浮点数转为整数&#xff0c;返回整数和倍数。如3.14 返回314 100 export function toInt(num) {var ret { times: 1,…

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

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

【RESTful】RESTful API的设计原则

目录 引言一、协议二、域名三、版本&#xff08;Versioning&#xff09;四、路径&#xff08;Endpoint&#xff09;4.1 每个资源应有唯一的URI标识4.2 资源路径设计 五、HTTP动词5.1 常用HTTP动词及其作用5.2 RESTful API利用HTTP方法表示对商品资源的操作 六、使用自描述消息6…