深入理解提升树(Boosting tree)算法

本文深入介绍了提升树(Boosting tree)算法,包括Boosting基本概念、前向分步加法模型、提升树模型和算法。重点讲述了回归提升树的示例,详细解释了如何通过最小化损失函数构建加法模型,并给出了逐步拟合残差的实例。此外,还探讨了提升树与梯度提升、GBDT的关系以及一些相关问题的思考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录:

  1. Boosting基本概念
  2. 前向分步加法模型
    2.1 加法模型
    2.2 前向分步算法
  3. 提升树
    3.1 提升树模型
    3.2 提升树算法
    3.2.1 二叉分类提升树
    3.2.1 二叉回归提升树
  4. 回归提升树示例
  5. 完整的示例代码
  6. 关于提升树的若干问题思考
  7. 总结
  8. Reference

1. Boosting基本概念

提升(Boosting)方法是一种常用的统计学习方法,应用广泛且有效。在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。

提升方法基于这样一种思想:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好。实际上,就是“三个臭皮匠顶个诸葛亮”的道理。

历史上,Kearns和Valiant首先提出了“强可学习(strongly learnable)”和“弱可学习(weakly learnable)”的概念。指出:在概率近似正确(probably approximately correct,PAC)学习的框架中,一个概念(一个类),如果存在一个多项式的学习算法能够学习它,并且正确率很高,那么就称这个概念是强可学习的;一个概念,如果存在一个多项式的学习算法能够学习它,学习的正确率仅比随机猜测略好,那么就称这个概念是弱可学习的。非常有趣的是Schapire后来证明强可学习与弱可学习是等价的,也就是说,在PAC学习的框架下,一个概念是强可学习的充分必要条件是这个概念是弱可学习的。

这样一来,问题便成为,在学习中,如果已经发现了“弱学习算法”,那么能否将它提升(boost)为“强学习算法”。大家知道,发现弱学习算法通常要比发现强学习算法容易得多。那么如何具体实施提升,便成为开发提升方法时所要解决的问题。关于提升方法的研究很多,有很多算法被提出。最具代表性的是AdaBoost算法(AdaBoost algorithm)。

Boosting算法的两个核心问题:
(1)在每一轮如何改变训练数据的权值或概率分布?
AdaBoost的做法是,提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。这样一来,那些没有得到正确分类的数据,由于其权值的加大而受到后一轮的弱分类器的更大关注。于是,分类问题被一系列的弱分类器“分而治之”。
(2)如何将弱分类器组合成一个强分类器?
弱分类器的组合,AdaBoost采取加权多数表决的方法。具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。
提升树是以分类树或回归树为基本分类器的提升方法。提升树被认为是统计学习中性能最好的方法之一。提升方法实际采用加法模型(即基函数的线性组合)与前向分步算法。以决策树为基函数的提升方法称为提升树(boosting tree)。对分类问题决策树是二叉分类树,对回归问题决策树是二叉回归树。下面让我们深入理解提升树的具体算法吧!

2. 前向分步加法模型

2.1 加法模型

考虑加法模型(Additive Model)如下:
f ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x) = \sum_{m=1}^{M}{\beta_{m}b(x;\gamma_{m})} f(x)=m=1Mβmb(x;γm)
其中, b ( x ; γ m ) b(x;\gamma_{m}) b(x;γm)为基函数, γ m \gamma_{m} γm 为基函数的参数, β m \beta_{m} βm 为基函数的系数。显然上式是一个加法模型。

2.2 前向分布算法

在给定训练数据及损失函数 L ( Y , f ( x ) ) L(Y,f(x)) L(Y,f(x))的条件下,学习加法模型 f ( x ) f(x) f(x) 成为经验风险极小化,即损失函数极小化的问题:
m i n ( β m , γ m ) ∑ i = 1 N L ( y i , ∑ m = 1 M β m b ( x i ; γ m ) ) min_{(\beta_{m},\gamma_{m})}\sum_{i=1}^{N}{L(y_{i},\sum_{m=1}^{M}{\beta_{m}b(x_{i};\gamma_{m})})} min(βm,γm)i=1NL(yi,m=1Mβmb(xi;γm))
通常这是一个复杂的优化问题。前向分布算法(forward stagewise algorithm)求解这一优化问题的想法是:因为学习的是加法模型,如果能够从前向后,每一步只学习一个基函数及其系数,逐步逼近上面要优化的目标函数,那么就可以简化优化的复杂度。
具体地,每步只需优化如下损失函数:
m i n ( β , γ ) ∑ i = 1 N L ( y i , β b ( x i ; γ ) ) min_{(\beta,\gamma)}\sum_{i=1}^{N}{L(y_{i},\beta b(x_{i};\gamma))} min(β,γ)i=1NL(yi,βb(xi;γ))
给定训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } , x i ∈ X ⊆ R n , y i ∈ Y = { − 1 , + 1 } T =\left\{ (x_{1}, y_{1}), (x_{2}, y_{2}),...,(x_{N}, y_{N})\right\},x_{i}\in X\subseteq R^{n},y_{i}\in Y=\left\{ -1, +1 \right\} T={ (x1,y1),(x2,y2),...,(xN,yN)},xiXRn,yiY={ 1,+1} 。损失函数 L ( Y , f ( x ) ) L(Y,f(x)) L(Y,f(x))和基函数的集合 { b ( X ; γ ) } \left\{ b(X;\gamma) \right\} { b(X;γ)} ,学习加法模型 f ( x ) f(x) f(x) 的前向分步算法如下:
前向分步算法步骤如下:
输入: 训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T =\left\{ (x_{1}, y_{1}), (x_{2}, y_{2}),...,(x_{N}, y_{N})\right\} T={ (x1,y1),(x2,y2),...,(xN,yN)} ;损失函数 L ( Y , f ( x ) ) L(Y,f(x)) L(Y,f(x));基函数集 { b ( X ; γ ) } \left\{ b(X;\gamma) \right\} { b(X;γ)}
输出: 加法模型 f ( x ) f(x) f(x)
(1)初始化 f 0 ( x ) = 0 f_{0}(x)=0 f0(x)=0
(2)对 m = 1 , 2 , . . . , M m=1,2,...,M m=1,2,...,M
(a)极小化损失函数:
( β m , γ m ) = a r g m i n β , γ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x i ; γ ) ) (\beta_{m},\gamma_{m})=argmin_{\beta,\gamma}\sum_{i=1}^{N}{L(y_{i},f_{m-1}(x_{i})+\beta b(x_{i};\gamma))} (βm,γm)=argminβ,γi=1NL(yi,fm1(xi)+βb(xi;γ))
得到参数 β m , γ m \beta_{m},\gamma_{m} βm,γm
(b)更新:
f m ( x ) = f m − 1 ( x ) + β m b ( x ; γ m ) f_{m}(x) = f_{m-1}(x)+\beta_{m}b(x;\gamma_{m}) fm(x)=fm1(x)+βmb(x;γm)
(3)得到加法模型:
f ( x ) = f M ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x) = f_{M}(x)=\sum_{m=1}^{M}{\beta_{m}b(x;\gamma_{m})} f(x)=fM(x)=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值