梯度提升决策树

与包袋和增强一样,梯度提升也是一种基于 另一种机器学习算法。通俗地说,梯度提升涉及 两种模型:

  • “弱”机器学习模型,这通常是决策树。
  • “strong”该机器学习模型由多个弱 模型。

在梯度提升中,在每个步骤中,都会训练一个新的弱模型, “错误”当前强模型的特征(称为伪响应)。 我们会详细描述“错误”。目前,假设为“error”是 预测和回归标签。弱模型(即“错误”) 然后添加到强模型中添加负号,以减少 模型。

梯度提升是迭代式的。每次迭代都会调用以下公式:

\[ F_{i+1} = F_i - f_i \]

其中:

  • $F_i$ 是第 $i$ 步的强模型。
  • $f_i$ 是第 $i$ 步的弱模型。

此操作将重复执行,直到满足停止条件(例如 迭代次数,或者如果(强)模型开始过拟合, 单独的验证数据集。

我们用一个简单回归数据集来说明梯度提升方法,其中:

  • 目的是根据 $x$ 预测 $y$。
  • 强模型初始化为零常量:$F_0(x) = 0$。
# Simplified example of regressive gradient boosting.

y = ... # the labels
x = ... # the features

strong_model = []
strong_predictions = np.zeros_like(y) # Initially, the strong model is empty.

for i in range(num_iters):

    # Error of the strong model
    error = strong_predictions - y

    # The weak model is a decision tree (see CART chapter)
    # without pruning and a maximum depth of 3.
    weak_model = tfdf.keras.CartModel(
        task=tfdf.keras.Task.REGRESSION,
        validation_ratio=0.0,
        max_depth=3)
    weak_model.fit(x=x, y=error)

    strong_model.append(weak_model)

    weak_predictions = weak_model.predict(x)[:,0]

    strong_predictions -= weak_predictions

我们将此代码应用于以下数据集:

一个特征 x 及其标签 y 的标准答案曲线图。图表是
一定阻尼的正弦系列
波次。

<ph type="x-smartling-placeholder"></ph> 图 25包含一个数值特征的合成回归数据集。

 

以下是梯度提升第一次迭代后的三个图 算法:

三个曲线图。第一个曲线图显示了强模型的预测,
斜率 0 和 y 截距 0 的直线。第二个曲线图显示了
强模型,也就是一系列正弦波。第三个曲线图显示了
也就是对较弱模型的预测,
波次。

<ph type="x-smartling-placeholder"></ph> 图 26第一次迭代后生成三个图表。

 

对于图 26 中的图表,请注意以下几点:

  • 第一个曲线图显示的是强效模型的预测, 始终为 0。
  • 第二个图显示的是误差,即弱模型的标签。
  • 第三个曲线图显示的是弱模型。

第一个弱模型是学习标签的粗略表示, 重点关注特征空间的左侧(变化最大的部分, 因此,对于恒定错误模型而言,错误率最高)。

以下是算法的另一次迭代的相同图形:

三个曲线图。第一个曲线图显示了强模型的预测,
与上一个弱模型预测的曲线图的反函数
图。第二个曲线图显示了强模型的误差,
一组正弦波。第三个曲线图显示的是弱模型的预测,
有几个方形
波次。

<ph type="x-smartling-placeholder"></ph> 图 27第二次迭代后绘制三个图表。

 

对于图 27 中的图表,请注意以下几点:

  • 现在,强模型包含 上一次迭代。
  • 强模型的新误差略小一些。
  • 对弱模型的新预测现在侧重于 特征空间。

我们再运行该算法 8 次迭代:

从这些曲线图可以看出,强大模型逐渐接近标准答案
而对弱模型的预测会逐渐变得
更弱。

<ph type="x-smartling-placeholder"></ph> 图 28在第三次迭代和第十次迭代后绘制三个图表。

 

在图 28 中,请注意,强模型的预测开始 数据集的图

这些图说明了使用决策树的梯度提升算法, 表现不佳的学习者。这种组合称为梯度提升(决策)树

上面的曲线图表明了梯度提升的本质。不过, 示例缺少以下两个实际操作:

  • 收缩
  • 使用牛顿法一步优化叶值

收缩

将弱模型 $f_i$ 乘以小值 $\nu$(例如,$\nu = 0.1$)。这个小值称为 收缩。也就是说,不是每次迭代都使用 公式:

\[ F_{i+1} = F_i - f_i \]

每次迭代都使用以下公式:

\[ F_{i+1} = F_i - \nu f_i \]

梯度提升中的收缩类似于神经网络中的学习速率。 压缩率可以控制强模型学习的速度,这有助于限制 过拟合。也就是说,收缩值接近 0.0 可以进一步降低过拟合 与接近 1.0 的收缩值相比较

在上面的代码中,缩减的实现方式如下:

shrinkage = 0.1   # 0.1 is a common shrinkage value.
strong_predictions -= shrinkage * weak_predictions