GBDT模型

GBDT模型

提升树|BDT

提升树是以分类树或回归树为基本分类器的提升方法。

提升树模型可以表示为决策树的加法模型:

$$ f_M(x)=\sum_{m=1}^MT(x;\Theta_m) $$

对分类问题是二叉分类树,对回归问题是二叉回归树。

提升树算法:前向分步算法

首先确定初始提升树$f_0(x)=0$,第m步的模型是

$$ f_m(x)=f_{m-1}(x)+T(x;\Theta_m) $$

通过经验风险极小化确定下一颗决策树的参数

$$ \hat{\Theta}m=\arg\min{\Theta_m}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m)) $$

由于树的线性组合可以很好地拟合训练数据,即使数据中的输入与输出之间的关系很复杂也是如此,所以提升树是一个高功能的学习算法。

不同问题的提升树学习算法,其主要区别在于使用的损失函数不同。

指数损失下的分类提升树

只需将AdaBoost算法中的基本分类器限制为二叉分类树即可。此时的提升树算法是AdaBoost算法的特殊情况。

平方损失下的回归提升树

已知训练数据集$T=\{(x_1,y_1),(x_2,y_2),\ldots,(x_N,y_N)\}$,其中实例$x_i\in \mathcal{X}\subseteq\mathbf{R}^n$,标记$y_i\in\mathcal{Y}=\{-1,+1\}$。如果将输入空间$\mathcal{X}$划分为J个互不相交的区域$R_1,R_2,\cdots,R_J$,并且在每个区域上确定输出的常量$c_j$,那么树可以表示为

$$ T(x;\Theta)=\sum_{j=1}^Jc_jI(x\in R_j) $$

使用前向分步算法:

$$ \begin{aligned}&f_0(x)=0\\&f_m(x)=f_{m-1}(x)+T(x;\Theta_m),\quad m=1,2\cdots,M\\&f(x)=\sum_{m=1}^M T(x;\Theta_m)\end{aligned} $$

当采用平方损失函数$L(y,f(x))=(y-f(x))^2$时

$$ \begin{aligned}L(y,f_{m-1}(x)+T(x;\Theta_m))&=[y-f_{m-1}(x)-T(x;\Theta_m)]^2\\&=[r-T(x;\Theta_m)]^2\end{aligned} $$

$$ \hat{\Theta}m=\arg\min{\Theta_m}\sum_{i=1}^N[r_i-T(x_i;\Theta_m)]^2 $$

这里$r=y-f_{m-1}(x)$即当前模型拟合数据的残差。

因此对于回归问题的提升树算法来说,只需简单地拟和当前模型的残差。

一般损失函数的一般决策问题

当损失函数是指数函数和平方损失函数时,每一步的优化是非常简单的。但对一般损失函数而言,往往优化并不那么容易,则需要通过梯度提升算法优化。