集成学习之提升树(DB、GBDT)


前言

上一讲简单介绍了集成学习以及Boost系列算法的思想,这一篇我们介绍统计学习性能最好之一的提升树。

一、提升树的模型

1.1 什么是提升树

提升方法采用的是加法模型(即多个基函数线性结合)与前向分步算法(每次只学习一个基函数及系数,逐步逼近最优解)。而以决策树为基函数的提升方法成为提升树。

1.2 提升树模型

提升树模型表示为决策树的加法模型
f M ( x ) = ∑ m = 1 M T ( x ; θ m ) (1) \begin{aligned} f_M(x) = \displaystyle\sum_{m=1}^{M}T(x; \theta_m)\tag{1} \end{aligned} fM(x)=m=1MT(x;θm)(1)

其中, T ( x ; θ m ) T(x; \theta_m) T(x;θm)表示决策树, θ m \theta_m θm为决策树参数,M为树的个数。

二、提升树算法(DB)

1. 引入数据集

假设给定一个训练数据集T = {( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) x_1, y_1), (x_2, y_2),...,(x_N, y_N) x1,y1),(x2,y2),...,(xN,yN)},其中,每个样本点由实例和标签组成。实例 x i ∈ x_i \in xi X ⊆ \subseteq R n R^n Rn y i y_i yi ∈ \in Y ⊆ \subseteq R,X是实例空间,Y是输出空间。

2. 前向分步算法

提升树使用前向分步算法。首先确定初始提升树
f 0 ( x ) = 0 (1) \begin{aligned} f_0(x)= 0\tag{1} \end{aligned} f0(x)=0(1)
在前向分步算法的第m步,给定当前模型 f m − 1 ( x ) f_{m-1}(x) fm1(x),知第m步模型
f m ( x ) = f m − 1 ( x ) + T ( x ; θ m ) (2) \begin{aligned} f_m(x) = f_{m-1}(x) + T(x; \theta_m)\tag{2} \end{aligned} fm(x)=fm1(x)+T(x;θm)(2)
需求解
θ m ^ = a r g m i n θ m ∑ i = 1 N L ( y i , f m − 1 ( x i ) + T ( x i ; θ m ) ) (3) \begin{aligned} \hat{\theta_m} = arg \underset{\theta_m}{min}\displaystyle\sum_{i=1}^{N}L(y_i,f_{m-1}(x_i) + T(x_i;\theta_m))\tag{3} \end{aligned} θm^=argθmmini=1NL(yi,fm1(xi)+T(xi;θm))(3)
得到 θ m ^ \hat{\theta_m} θm^,即第m棵树的参数,根据参数构建决策树。

3. 树的表示

如果将输入空间X划分为J个互不相交的区域 R 1 , R 2 , . . . , R J R_1,R_2,...,R_J R1R2...RJ,并且在每个区域上确定出常量 c j c_j cj,那么树可表示为:
T ( x i ; θ ) = ∑ j = 1 J c j I ( x ∈ R j ) (4) \begin{aligned} T(x_i;\theta) = \displaystyle\sum_{j=1}^{J}c_jI(x \in R_j)\tag{4} \end{aligned} T(xi;θ)=j=1JcjI(xRj)(4)

其中,参数 θ = { ( R 1 , c 1 ) , ( R 2 , c 2 ) , . . . , ( R J , c J ) } \theta = \{(R_1, c_1), (R_2, c_2), ..., (R_J, c_J)\} θ={(R1,c1),(R2,c2),...,(RJ,cJ)}表示树的区域划分和各区域上的常数(即上面求的参数),J是回归树的复杂度也即叶结点个数。

4. 残差

采用平方误差损失函数,即
L ( y , f ( x ) ) = ( y − f ( x ) ) 2 (5) \begin{aligned} L(y, f(x)) = (y - f(x))^2\tag{5} \end{aligned} L(y,f(x))=(yf(x))2(5)
代入
L ( y i , f m − 1 ( x i ) + T ( x i ; θ m ) ) ) = [ y i − f m − 1 ( x ) − T ( x ; θ m ) ] 2 = [ r m i − T ( x ; θ m ) ] 2 (6) \begin{aligned} L(y_i, f_{m-1}(x_i) + T(x_i;\theta_m))) &= [y_i - f_{m-1}(x) - T(x; \theta_m)]^2\\ &= [r_{mi} - T(x; \theta_m)]^2\tag{6} \end{aligned} L(yi,fm1(xi)+T(xi;θm)))=[yifm1(x)T(x;θm)]2=[rmiT(x;θm)]2(6)
这里, r m i = y i − f m − 1 ( x ) r_{mi} = y_i - f_{m-1}(x) rmi=yifm1(x)

5. 最终的提升树

从第二轮开始,用残差拟合训练数据,不断重复步骤2、3、4,直到满足误差要求,得到最终的提升树。
f M ( x ) = ∑ m = 1 M T ( x ; θ m ) (7) \begin{aligned} f_M(x)= \displaystyle\sum_{m=1}^{M}T(x;\theta_m)\tag{7} \end{aligned} fM(x)=m=1MT(x;θm)(7)

三、提升树算法(DBGT)

1.GBDT的由来

因为损失函数不同,提升算法能解决的问题也不同,一般来说,平方误差损失函数主要解决回归问题,指数损失函数解决分类问题,一般损失函数解决一般决策问题。对于平方函数和指数函数,优化很简单,但是对于一般的损失函数,优化并不容易。因此,Freidman提出了DBGT算法,用最速下降法的近似方法,利用损失函数的负梯度在当前模型的值作为残差近似值来拟合一棵回归树。

2. 算法

2.1 引入数据集

给定一个训练数据集T = {( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) x_1, y_1), (x_2, y_2),...,(x_N, y_N) x1,y1),(x2,y2),...,(xN,yN)},其中, x i ∈ x_i \in xi X ⊆ \subseteq R n R^n Rn y i y_i yi ∈ \in Y ⊆ \subseteq R,X是实例空间,Y是输出空间,损失函数 L ( y , f ( x ) ) L(y, f(x)) L(y,f(x))

2.2 初始化

f 0 ( x ) = a r g m i n c ∑ i = 1 N L ( y i , c ) (8) \begin{aligned} f_0(x) = arg \underset{c}{min}\sum_{i = 1}^{N}L(y_i,c)\tag{8} \end{aligned} f0(x)=argcmini=1NL(yi,c)(8)

估计是损失函数极小化的常数值,它是只有一个根结点的树

2.3 对m = 1,2,…,M

  • 对 i = 1,2,…,N,计算
    r m i = − [ ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) (9) \begin{aligned} r_{mi} = -[\frac{\partial L(y_i, f(x_i))}{\partial f(x_i)}]_{f(x) = f_{m-1}(x)}\tag{9} \end{aligned} rmi=[f(xi)L(yi,f(xi))]f(x)=fm1(x)(9)

计算损失函数的负梯度在当前模型的值,将它作为残差估计值

  • r m i r_{mi} rmi拟合一个回归树,得到第m棵树的叶结点区域 R m j , j = 1 , 2 , . . . , J R_{mj},j = 1,2,...,J Rmjj=12...J

以拟合残差近似值,求该区域

  • 对j = 1,2,…,J,计算
    c m j = a r g m i n c ∑ x i ∈ R m j L ( y i , f m − 1 ( x i ) + c ) (10) \begin{aligned} c_{mj} = arg \underset{c}{min}\sum_{x_i \in R_{mj}}{L(y_i, f_{m-1}(x_i) + c)}\tag{10} \end{aligned} cmj=argcminxiRmjL(yi,fm1(xi)+c)(10)

线性搜索估计叶结点区域的值,使损失函数极小化

  • 更新
    f m ( x ) = f m − 1 ( x ) + ∑ j = 1 J c m j I ( x ∈ R m j (11) \begin{aligned} f_m(x) = f_{m-1}(x) + \sum_{j = 1}^{J}c_{mj}I(x \in R_{mj}\tag{11} \end{aligned} fm(x)=fm1(x)+j=1JcmjI(xRmj(11)

2.4输出最终回归树

f ( x ) ^ = f M ( x ) = ∑ m = 1 M ∑ j = 1 J c m j I ( x ∈ R m j ) (12) \begin{aligned} \hat{f(x)} = f_M(x) = \sum_{m=1}^{M}\sum_{j = 1}^{J}c_{mj}I(x \in R_{mj})\tag{12} \end{aligned} f(x)^=fM(x)=m=1Mj=1JcmjI(xRmj)(12)

结论

提升树的整体思路都是一样的,采用加法模型和前向分步算法。一般来说,平方误差损失函数主要解决回归问题,指数损失函数解决分类问题,一般损失函数解决一般决策问题。这里主要介绍了适合回归问题的DB和适合一般决策问题的GBDT,两者区别是损失函数的不同,前者的平方误差损失函数就是残差,而后者是求损失函数的负梯度作为残差估计,最终都是拟合回归树,采用前向分步得到最终的提升树。

参考文献

李航.统计学习方法(第二版) [M].北京:清华大学出版社,2019

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值