在回顾了集成方法之后,现在我们来考察梯度提升框架中广泛用作构建模块的特定模型类型:决策树。尽管其他模型理论上可以作为基学习器,但决策树,特别是分类回归树(CART),提供了令人信服的特性组合,使其非常适合提升算法的累加和错误修正特性。为什么选择决策树?决策树将特征空间划分为矩形区域,并在每个区域(特别是每个叶节点内)分配一个常数预测值。这种内在结构在提升算法中有多个优点:捕获非线性和关联: 与线性模型不同,树模型自然地模拟特征与目标变量之间的非线性关系。此外,分割的顺序性使得树能够捕获复杂的关联效应。例如,先对特征 A 进行分割,再对特征 B 进行分割,有效地隔离了一个由 A 和 B 条件共同定义的区域,隐含地建模了它们之间的关联。提升算法通过添加树来改进特征空间不同区域的预测,从而捕获规律。处理不同数据类型: 标准CART算法在分割过程中可以原生地处理数值(连续或离散)和分类特征,尽管某些提升库的实现最初可能需要对分类变量进行预处理,例如独热编码。更高级的库,如LightGBM和CatBoost,包含了处理分类特征的专门、高效的方法,我们稍后会详细介绍。计算方面的考量: 在树中寻找最优分割涉及扫描特征和潜在分割点。虽然对于大型数据集上的深层树来说计算密集,但已经开发出算法(精确贪婪、近似方法、基于直方图的方法),使得训练相当高效,特别是对于提升算法中使用的相对简单的树。这些算法在一定程度上易于并行化。可解释性(单个树): 尽管包含数百或数千棵树的大型提升集成模型是复杂的,但单个的浅层决策树相对容易可视化和理解。这一特性在开发和调试阶段很有帮助,可以检查每棵独立树对集成模型的贡献。“弱学习器”的原理提升算法迭代地组合多个“弱学习器”以得到一个“强学习器”。弱学习器被定义为在分类或回归任务上性能略优于随机猜测的模型。在决策树的背景下,这意味着使用浅层树,通常被称为“树桩”(只有一次分割的树,即深度为1)或深度非常有限的树(例如,深度2到8)。为什么选择弱学习器?减少过拟合: 深层、复杂的树容易过拟合训练数据。通过保持每棵树的简单性,提升算法限制了每次迭代增加的复杂度。关注残差: 每棵新树都专注于修正集成模型迄今为止所犯的错误(残差或伪残差)。弱学习器足以捕获这些残差中的信号,而不会过拟合噪声。逐步改进: 提升算法逐步构建模型。使用弱学习器确保这个过程是渐进的,防止模型预测出现大范围、潜在不稳定的跳跃,并允许通过多次迭代进行微调。常用于控制树复杂度并使它们保持“弱”的超参数包括:max_depth:任何单个树允许的最大深度。min_samples_split:考虑分割内部节点所需的最小样本数。min_samples_leaf:叶节点中所需的最小样本数。max_leaf_nodes:一棵树可以拥有的最大终端节点(叶子)数。这与随机森林等算法形成鲜明对比,后者通常从使用深层、完全生长(或几乎完全生长)的决策树中获益,依赖于对许多不相关树的预测进行平均以降低方差。提升算法中的树构建标准决策树直接训练以预测目标变量 $y$,而梯度提升集成模型中的树的训练方式不同。在每次迭代 $m$ 中,训练一棵新树 $h_m(x)$ 来预测前一阶段的伪残差。对于回归中的平方误差等常见损失函数,伪残差就是损失函数相对于模型在前一步预测的负梯度,这恰好是实际的残差:$r_{im} = y_i - F_{m-1}(x_i)$,其中 $F_{m-1}(x)$ 是集成模型在 $m-1$ 次迭代后的预测。对于其他损失函数(如分类的对数损失),伪残差表示负梯度,指导树的构建,使其朝向最大程度降低总损失的方向。然后使用这些伪残差作为目标值来应用树的分割标准(例如回归树的方差减小)。考虑一个简单的回归示例:从初始常数预测 $F_0(x)$ 开始。计算所有数据点 $i$ 的残差 $r_{i1} = y_i - F_0(x_i)$。训练一棵浅层决策树 $h_1(x)$ 来预测这些残差 $r_{i1}$。这棵树的分割旨在将具有相似残差值的数据点分组。更新集成预测:$F_1(x) = F_0(x) + \nu h_1(x)$(其中 $\nu$ 是学习率)。计算新的残差 $r_{i2} = y_i - F_1(x_i)$。训练一棵新树 $h_2(x)$ 来预测 $r_{i2}$,依此类推。每棵树都专注于解释当前集成模型未解释的剩余误差。digraph G { graph [fontsize=10]; node [shape=box, style="filled, rounded", fontname="sans-serif", fontsize=10, margin=0.1]; edge [fontname="sans-serif", fontsize=9]; N0 [label="根节点\n伪残差", fillcolor="#ced4da"]; N1 [label="特征 A < 5?\n方差减小: 0.8", fillcolor="#a5d8ff"]; N2 [label="特征 B > 10?\n方差减小: 0.5", fillcolor="#a5d8ff"]; N3 [label="叶节点 1\n值: -0.25", fillcolor="#b2f2bb", shape=ellipse]; N4 [label="叶节点 2\n值: 0.15", fillcolor="#b2f2bb", shape=ellipse]; N5 [label="叶节点 3\n值: 0.60", fillcolor="#b2f2bb", shape=ellipse]; N0 -> N1 [label="是"]; N0 -> N5 [label="否"]; N1 -> N2 [label="是"]; N1 -> N4 [label="否"]; N2 -> N3 [label="是"]; N2 -> N4 [label="否"]; // 为简化起见重用叶节点 4 }提升迭代中在伪残差上生长出的单个回归树的简化视图。分割旨在最小化所得节点内残差的方差。应对树的局限性单个决策树存在某些缺点:高方差: 它们对训练数据中的微小变化很敏感,导致不同的树结构并可能过拟合。贪婪分割: 在每个节点寻找最优分割的过程是贪婪的,不能保证得到全局最优的树。梯度提升有效地缓解了这些问题:方差降低: 通过平均许多树的预测(尽管是累加的、分阶段的方式),并使用收缩(学习率)和子采样(随机梯度提升)等技术,最终模型的总方差相比于单棵树显著降低。提高准确性: 顺序拟合过程使集成模型能够逐步改进预测,并且有能力发现比单个树由于其贪婪特性所能最佳捕获的模式更复杂的模式。正则化技术(我们稍后会讨论)进一步控制了复杂度。总而言之,决策树,特别是浅层CART实现,提供了必要的灵活性来模拟复杂函数和关联,可以处理不同数据类型,并且可以相当高效地训练。当它们生长得很深时,易于产生高方差的趋势在提升算法中被有意地限制,通过保持它们“弱”的特性。它们不是在原始目标上训练的,而是在损失函数的残差或梯度上训练,使提升集成模型能够顺序地修正错误并构建一个强大的预测模型。这一理论对于理解XGBoost、LightGBM和CatBoost等算法引入的特定优化和改进非常重要。