与包袋和增强一样,梯度提升也是一种基于 另一种机器学习算法。通俗地说,梯度提升涉及 两种模型:
- “弱”机器学习模型,这通常是决策树。
- “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
我们将此代码应用于以下数据集:
<ph type="x-smartling-placeholder"></ph> 图 25包含一个数值特征的合成回归数据集。 。
以下是梯度提升第一次迭代后的三个图 算法:
<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