梯度提升树:负梯度和残差

1 提升树模型

提升树是以分类树和回归树为基本分类器的提升方法。提升树被认为是统计学习中性能最好的方法之一。

提升方法实际采用加法模型(即基函数的线性组合)与前向分布算法。以决策树为基函数的提升方法称为提升树(boosting tree)。

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

\[f_M(x) = \sum_{m=1}^{M}T(x; \Theta_m) \]

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

  1. 提升树算法采用前向分布算法

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

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

其中,\(f_{m-1}(x)\) 为当前模型,通过经验风险极小化确定下一棵决策树的参数 \(\Theta_m\)

\[\hat{\Theta}_m = arg \min_{\Theta_m} \sum_{i=1}^{N}L(y_i, f_{m-1}(x_i) + T(x_i; \Theta_m)) \]

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

  1. 用平方误差损失函数的回归问题;

  2. 用指数损失函数的分类问题;

  3. 用一般损失函数的一般决策问题。

2 负梯度和残差

梯度提升模型的求解过程是梯度下降在函数空间的优化过程。

残差是负梯度在损失函数为平方误差时的特殊情况。

  1. 我们希望找到一个 \(f(x)\) 使得 \(L(y, f(x))\) 最小,当前我们得到 \(f_{m-1}(x)\),如果想得到更优的 \(f(x)\),根据梯度下降法进行迭代,\(f(x)\) 就得沿着使损失函数 \(L\) 减小的方向变化。

\[\begin{align} f_m(x) = f_{m-1}(x) - \eta \frac{\partial{L(y, f_{m-1}(x))}}{\partial{f_{m-1}(x)}} \end{align} \]

其中,\(\eta\) 为学习率,\(\frac{\partial{L(y, f_{m-1}(x))}}{\partial{f_{m-1}(x)}}\) 为损失函数 \(L\) 对未知函数的偏导 \(\frac{\partial{L(y, f(x))}}{\partial{f(x)}}\)\(f_{m-1}(x)\) 处的值。

同时,最新学习器是由当前学习器 \(f_{m-1}(x)\) 与本次要生成的回归树 \(T_m(x)\) 相加得到

\[\begin{align} f_m(x) = f_{m-1}(x) + \eta T_m \end{align} \]

因此,为了让损失函数减小,根据式(1)和(2)知,可以取

\[T_m(x) = - \frac{\partial{L(y, f_{m-1}(x))}}{\partial{f_{m-1}(x)}} \]

因此,我们可以使用损失函数对 \(f(x)\) 的负梯度 $$- \frac{\partial{L(y, f_{m-1}(x))}}{\partial{f_{m-1}(x)}}$$ 来拟合新的回归树 \(T_m(x)\).

  1. 当损失函数为平方损失时,即

\[L(y, f(x)) = \frac{1}{2}\big(y - f(x) \big)^2 \]

损失函数的负梯度为

\[- \frac{\partial{L(y, f(x))}}{\partial{f(x)}}\Big|_{f_{m-1}(x)} = - \frac{\partial{L(y, f_{m-1}(x))}}{\partial{f_{m-1}(x)}} = y - f_{m-1}(x) \]

这里, \(y - f_{m-1}(x)\) 是当前模型拟合数据的残差(residual)。所以,对回归问题的提升树来说,只需要简单的拟合当前模型的残差。

最后,准确的说,不是负梯度代替残差,而是损失函数是平方损失时,负梯度刚好是残差,残差只是特例。

参考

  1. 《统计学习方法》 李航

  2. 《GBDT算法原理与系统设计简介》 wepon

posted @ 2021-02-18 11:09  Hiidiot  阅读(1040)  评论(0编辑  收藏  举报