集成学习之梯度提升树(GBDT)

$GBDT$ 也是集成学习 $Boosting$ 家族的成员,但是却和传统的 $Adaboost$ 有很大的不同。回顾下 $Adaboost$,我们是利用前一轮迭代弱学习器的误差率

来更新训练集的权重,这样一轮轮的迭代下去。$GBDT$ 也是迭代,使用了前向分布算法,但是弱学习器限定了只能使用 $CART$ 回归树模型,同时迭代

思路和 $Adaboost$ 也有所不同。

提升树

提升树模型是以分类树或回归树为基本分类器的提升方法,这里限定了只能采用决策树模型,采用其它模型就不能称为树了。

这个模型也是采用加法模型(即基函数的线性组合)与前向分步算法。先来通俗解释一下它的过程。假设有样本集如下:

$$left {(x_{1},y_{1}),(x_{2},y_{2}),...,(x_{n},y_{n}) ight }$$

首先用决策树模型 $f_{0}(x) = T_{0}(x)$ 去拟合这些数据,使得这批样本的平方损失函数 $sum_{i = 0}^{n}left ( y_{i} - f_{0}(x_{i}) ight )^{2}$ 最小,但是发现虽然模型的拟合效果很好,但仍

然有些差距。比如预测值 $f_{0}(x_{1}) = 0.8$,而真实值 $y_{1}=0.9$, $f_{0}(x_{2})=1.4$, $y_{2}=1.3$ 等等。现在不允许更改原来模型 $f_{0}(x)$ 的参数,有什么办法

来提高模型的拟合能力呢?

既然不能更改原来模型的参数,那么意味着必须在原来模型的基础之上做改善,直观的做法就是建立一个新的模型 $T_{1}(x)$ 来拟合 $f_{0}(x)$ 未完全拟合真实

样本的残差,即 $y - f_{0}(x)$,所以对于新的模型 $T_{1}(x)$来说,拟合的样本集就变成了:

$$left ( x_{1}, y_{1} - f_{0}(x_{1}) ight ), ; left ( x_{2}, y_{2} - f_{0}(x_{2}) ight ), cdots , left ( x_{n}, y_{n} - f_{0}(x_{n}) ight )$$

拟合出模型 $T_{1}$ 后,我们便得到了更接近原始样本的函数:$f_{1}(x) = f_{0}(x) + T_{1}(x)$。之后可以继续训练新 $T_{2}(x)$ 模型拟合残差 $y - f_{1}(x)$......

提升树算法步骤如下:

    1)初始化 $f_{0}(x) = 0$。

    2)对 $m = 1,2,...,M$,重复以下操作得到 $M$ 个学习器:

       a. 计算残差:

$$r_{mi} = y_{i} - f_{m-1}(x_{i}), ; i = 1,2,cdots,n$$

       b. 拟合残差 $r_{mi}$ 学习一个回归树,得到 $T_{m}(x)$。

       c. 更新 $f_{m}(x) = f_{m-1}(x) + T_{m}(x)$

    3)得到回归问题提升树:

$$f_{M}(x) = sum_{m = 1}^{M}T_{m}(x)$$

为什么训练的下一个模型 $T_{m}$ 去拟合的样本是残差呢?

其实不一定。提升树是一个加性模型,我们希望这个模型在训练集上的经验误差最小,即

$$min sum_{i = 1}^{n}L left ( y_{i}, f(x_{i}) ight ) ; Leftrightarrow ; min sum_{i = 1}^{n}L left ( y_{i}, sum_{m = 1}^{M}T_{m}(x_{i}) ight )$$

通常这是一个复杂的优化问题。前向分步算法求解这一优化问题的思想就是:因为最终模型是一个加性模型,如果能从前往后,每一步只学习一个基本

学习器 $T_{m}(x)$,不断迭代得到最终的模型,那么就可以简化问题复杂度。具体的,当我们经过 $m-1$ 轮迭代得到了最优模型 $f_{m-1}(x)$时,因为

$$f_{m}(x) = f_{m - 1}(x) + T_{m}(x)$$

优化目标就为

$$min sum_{i = 1}^{n}Lleft ( y_{i}, f_{m - 1}(x_{i}) + T_{m}(x_{i}) ight )$$

当采用平方损失函数的时候

$$Lleft ( y_{i}, f_{m - 1}(x_{i}) + T_{m}(x_{i}) ight ) = left [; y_{i} - f_{m - 1}(x_{i}) - T_{m}(x_{i}) ; ight ]^{2} = left [; r_{mi} - T_{m}(x_{i}) ; ight ]^{2}$$

也就是说,当误差函数采用平方损失的时候,$T_{m}$ 拟合的就是残差,当然也可能存在其它误差函数,使得模型拟合的不是残差。

提升树模型特指拟合的是残差的情形,这一点从算法步骤中可以看出,也就是说提升树只针对那些包含残差项的损失函数。

梯度提升树

对于一般的回归树,采用平方误差损失函数,这时根据前向分布每次只需要达到最优化,就能保证整体上的优化。由于平方误差的特殊性,可以推导

每次需要拟合的就是残差(真实值-预测值),而对于其他损失函数,每次拟合的就不知道是什么东西了,推导过程也可能很复杂,将提升树算法进

行改进,提出一种适用于任意损失函数的模型。设损失函数为

$$L(y,f(x))$$

将 $f(x)$ 看成一个参数,为了使 $L$ 损失函数最小,采用梯度下降的方法即:

$$f_{m}(x) = f_{m - 1}(x) - eta frac{dL}{df(x)}$$

又因为

$$f_{m}(x) = f_{m - 1}(x) + T_{m}(x)$$

所以有

$$T_{m}(x) = - eta frac{dL}{df(x)}$$

左边为预测值,右边为真实值,所以整个过程就变成了每次拟合损失函数的负梯度的值。可以将这种方法看成一般损失函数的情况,而平方损失是特

殊的情况(平方损失函数的导数就是残差),所以提升树其实就是梯度提升树的特例。

原文地址:https://www.cnblogs.com/yanghh/p/13956477.html