除了成分树模型的大小 $J$ 外,梯度提升方法的另一个超(meta)参数是提升循环的次数 $M$。每次循环通常可以降低训练集上的损失 $L(f_M)$,因而只要 $M$ 足够大,可以将这个损失降低到任意小。不过对训练数据过好的拟合会导致过拟合,这使模型对未来数据预测的损失增大。因此,存在一个最小化未来损失的最优循环次数 $M^*$,它依赖于具体的应用场景。估计 $M^*$ 的一个方便方法是在验证样本上构建出预测损失作为 $M$ 的函数。那么将这个损失最小化的 $M$ 取值作为对 $M^*$ 的估计。这可类比于在神经网络中通常使用的早停法(第 11.4 节)。
10.12.1 收缩
控制 $M$ 的取值并不是唯一可行的正则化方法。如同岭回归(ridge regression)和神经网络,也可以应用收缩(shrinkage)方法(见第 3.4.1 节和 第 11.5 节)。在提升方法的框架中,收缩方法的最简单实现是将每个树模型的贡献在加入到当前函数近似时,按因子 $0<\nu<1$ 进行缩小。也就是将算法 10.3 中的第 2.4 行替换为:
$$f_m(x) = f_{m-1}(x) + \nu \cdot \sum_{j=1}^J \gamma_{jm} I(x \in R_{jm}) \tag{10.41}$$参数 $\nu$ 可被理解为控制了提升方法的学习率(learning rate)。较小的 $\nu$ 值(较大的收缩)会在同样循环次数 $M$ 下导致更大的训练集损失。因此,$\nu$ 和 $M$ 都控制了训练集上的预测损失。然而这两个参数的效果并不独立。若要达到同样的训练集损失,较小的 $\nu$ 值要对应着较大的 $M$ 值,所以在两者之间存在一个权衡。
从实践经验中(Friedman, 2001)发现,较小的 $\nu$ 值可能得出更佳的测试集误差,并且同时也对应地要求更大的 $M$ 值。实际上,最佳的策略是设置 $\nu$ 为一个很小的值($\nu<0.1$)然后再用早停法来选择 $M$。这在回归和概率估计中都带来了巨大的改进(相对于无收缩 $\nu=1$)。在通过式 10.20 的误分类损失上对应的改进没有那么巨大,但仍然是显著的。这些改进需要在计算量上付出一定代价:较小的 $\nu$ 值会导致较大的 $M$ 值,而计算量是与后者成比例的。不过如下面所述,即使在很大的数据集上,大循环次数也一般在计算量上是可行的。其部分原因就是在每步中进行的是一个较小的树模型而且不需要剪枝。
图 10.11 展示了图 10.2 中的模拟例子(式 10.2)的测试误差曲线。用二项偏差训练了梯度提升模型(MART),其中的场景包括了使用树桩模型或六个终节点的树模型,以及存在收缩或不存在收缩。可明显看出收缩带来的好处,尤其是在二项偏差的曲线中。使用了收缩后,每个测试误差曲线都达到了一个较低的水平,并且在之后的循环中保持在这个水平上。
第 16.2.1 节建立了提升方法的前向分段收缩和使用 $L_1$ 惩罚项对模型参数正则化(套索,lasso)两者之间的联系。作者认为 $L_1$ 的惩罚项可能要优于诸如支持向量机的方法中所使用的 $L_2$ 惩罚项。
10.12.2 子抽样 Subsampling
第 8.7 节中介绍了自助聚合(bagging)通过取平均的方式可改进噪声较高的分类器的效果。第十五章会更细致地介绍这种抽样后再平均的方差缩减方法。在梯度提升方法中可采取同样的方式,在改进效果的同时也可改善计算效率。
随机梯度提升(stochastic gradient boosting)方法中(Friedman, 1999),在每步循环时从训练观测样本中以比例 $\eta$ 进行(无放回)抽样,并在这个子样本上生成下一个树模型。算法的其他部分保持不变。比例 $\eta$ 通常采用 $\frac{1}{2}$,不过对比较大的 $N$,$\eta$ 可以是比 $\frac{1}{2}$ 小得多的值。
这样的抽样不仅可将计算时间按同样的比例 $\eta$ 缩短,在很多场景中实际上也会得出更准确的模型。
图 10.12 演示了在模拟例子(式 10.2)上子抽样的效果,其中包含了分类问题和回归问题的示例。在两个场景中都可见结合了收缩和抽样的模型的表现稍微好于其他模型。而不进行收缩的子抽样模型表现不佳。
这个方法带来一个不利是现在模型中有四个待定的参数:$J$、$M$、$\nu$ 和 $\eta$。一般会通过一些前期考察来确定 $J$、$\nu$ 和 $\eta$ 的适当取值,只剩 $M$ 作为首要的参数。