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

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.mrgr.cn/news/63295.html

相关文章:

  • COMSOL细观混凝土砂浆及界面过渡区受压损伤破坏
  • css 对称按钮,中间斜平行间隔,两头半圆
  • 选项卡设计与实现
  • Java-I/O框架:FileReader类使用、FileWriter类的使用、字符流复制文件
  • Java项目实战II基于Java+Spring Boot+MySQL的工程教育认证的计算机课程管理平台(源码+数据库+文档)
  • 【力扣专题栏】重排链表,如何实现链表里面节点之间的交换?
  • 【综合算法学习】(第十三篇)
  • java枚举高级用法
  • Ubuntu20.04版本安装pytorch(宝宝级攻略)
  • FineReport 超级链接
  • 入行网络安全需要学习哪些知识点?白帽子佬都给你汇总在这里,一文全懂_网络安全入门应该学什么
  • huggingface利用bert-base-chinese实现中文情感分类
  • 从倍压整流到二极管钳位与限幅
  • Agent 大模型与应用场景之间的桥梁
  • 4路CAN转WiFi网关
  • Caffeine缓存库的LoadingCache:缓存计算或查询结果
  • Verilog HDL学习记录(3~4章)
  • PMP每日一练(二十一)
  • Spring Boot JPA中的Page组件详解
  • JavaScript 入门指南
  • 1. 让我们聊聊 Netty:高性能网络通信库
  • Tita:什么是 360 评估?
  • 计算机低能儿从0刷leetcode | 34.在排序数组中查找元素的第一个和最后一个位置 | 二分法
  • .net 在线客服系统,到底能不能处理 50万 级消息量,系统架构实践
  • HTTP返回码和其含义
  • Vue中ref、reactive、toRef、toRefs的区别