在回归问题中,将有符号误差定义为预测值与标签之间的差值是合理的。不过,对于其他类型的问题,这种策略通常会导致效果不佳。在梯度提升中,更好的策略是:
- 定义一个类似于神经网络中使用的损失函数。例如,分类问题的熵(也称为对数损失)。
- 训练弱模型,以根据强模型输出预测损失的梯度。
形式上,给定损失函数 $L(y,p)$(其中 $y$ 是标签,$p$ 是预测),用于在第 $i$ 步训练弱模型的伪响应 $z_i$ 为:
$$ z_i = \frac {\partial L(y, F_i)} {\partial F_i} $$
其中:
- $F_i$ 是强模型的预测结果。
上面的示例是一个回归问题:目标是预测数值。对于回归问题,平方误差是一个常见的损失函数:
$$ L(y,p) = (y - p)^2 $$
在本例中,梯度为:
$$ z = \frac {\partial L(y, F_i)} {\partial F_i} = \frac {\partial(y-p)^2} {\partial p} = -2(y - p) = 2 \ \text{signed error} $$
换句话说,梯度是示例中带有系数 2 的有符号误差。请注意,由于收缩,常量因子不重要。请注意,只有对于使用平方误差损失函数的回归问题,此等式才成立。对于其他监督学习问题(例如分类、排名、使用百分位损失函数的回归),梯度和有符号误差之间并不等价。
使用牛顿方法步骤优化叶和结构
牛顿法是一种优化方法,与梯度下降法类似。不过,与仅使用函数梯度进行优化的梯度下降法不同,牛顿法同时使用函数的梯度(一阶导数)和二阶导数进行优化。
梯度下降法的步骤如下:
$$ x_{i+1} = x_i - \frac {df}{dx}(x_i) = x_i - f'(x_i) $$
和牛顿法如下所示:
$$ x_{i+1} = x_i - \frac {\frac {df}{dx} (x_i)} {\frac {d^2f}{d^2x} (x_i)} = x_i - \frac{f'(x_i)}{f''(x_i)}$$
您可以通过以下两种方式将牛顿法集成到梯度提升树的训练中(可选):
- 训练完树后,系统会对每个叶子应用一个牛顿步骤,并替换其值。树结构保持不变;只有叶值会发生变化。
- 在树生长过程中,系统会根据包含牛顿公式组件的得分来选择条件。树的结构会受到影响。
YDF 代码
在 YDF 中:
- YDF 始终对叶节点应用牛顿步骤(选项 1)。
- 您可以使用
use_hessian_gain=True
启用选项 2。