正如章节引言中指出的,梯度提升模型建立在弱学习器之上,通常是决策树。提升的效力在于迭代地添加这些树,每棵树都纠正了之前集成的错误。然而,如果允许单棵树变得任意复杂,它们很容易记住训练数据,包括其中的噪声。限制这些基础学习器的结构是一种基本的正则化技术。限制树的深度(max_depth)限制决策树复杂度的最直接方法之一是限制其最大深度。树的深度是从根节点到叶节点的最长路径的长度。影响: 较浅的树(小的max_depth)复杂度较低。它们只能捕获相对简单的模式和低阶特征交互(涉及由根路径决定的少量特征的交互)。较深的树(大的max_depth)可以模拟更复杂的关联和高阶特征交互。正则化效果: 通过限制max_depth,可以防止树生成高度特定的路径,以适应个别或小部分训练样本。这会促使模型找到在数据较大子集中共享的更普遍的模式。权衡:过浅: 模型可能欠拟合,未能捕获数据中的重要结构(高偏差)。过深: 模型很可能过拟合,捕获噪声并在未见过的数据上表现不佳(高方差)。典型值: 值通常在3到10之间,但最佳深度高度依赖于数据集大小、维度以及底层函数的固有复杂度。更深的树在构建时计算成本更高,需要更多数据才能可靠地训练而不过拟合。在提升的背景下,即使是相对较浅的树(例如,深度4-8)也能形成强大的集成,因为复杂度是在多次迭代中累加形成的。每叶节点最小样本数(min_samples_leaf)树的终端节点(叶节点)中必须包含的最小训练样本数是一个重要的结构限制。一个分裂点只有在左右分支中都至少留下min_samples_leaf个训练样本时,才被认为是有效的。影响: 将此参数设置为大于1的值,可以防止模型生成对应于极少数(可能是异常值)训练样本的叶节点。它能有效地平滑模型的预测函数,尤其是在回归任务中。正则化效果: 较高的min_samples_leaf会促使树生成更普遍的数据分区。它阻止模型基于极小部分实例进行高度特定的预测,从而降低方差和过拟合。权衡:过低(例如,1): 树可以为单个样本创建叶节点,从而最大化过拟合的可能性。过高: 树可能变得过度受限,无法捕获数据中更精细的模式,导致欠拟合(高偏差)。考量: 合适的值通常取决于总样本数。它可以指定为绝对数(例如,10个样本),或者有时是总训练样本的某个比例。请注意,像XGBoost这样的库使用min_child_weight,它考虑的是叶节点中Hessian权重的总和,而不仅仅是样本数量,这提供了更精细的控制,尤其是在加权数据集或特定目标函数下。每次分裂最小样本数(min_samples_split)此参数设置了内部节点进行进一步分裂所需的最小训练样本数。如果一个节点包含的样本少于min_samples_split,即使潜在的分裂会提高纯度,该节点也不会被考虑进行分裂。影响: 它在树构建过程中比min_samples_leaf更早起作用。它会更早地停止树的较小分支的划分过程。正则化效果: 与min_samples_leaf类似,它阻止模型尝试划分非常小的样本组,这些样本组可能只反映了训练数据中的噪声。它有助于构建更具泛化性的树。权衡: 与min_samples_leaf适用类似的权衡。设置过高会导致欠拟合,而默认值(通常为2)允许在最小数据上进行分裂,可能增加过拟合风险。与min_samples_leaf的关系: 通常,min_samples_split >= 2 * min_samples_leaf以确保任何潜在的分裂都能实际产生有效的叶节点。设置min_samples_split有助于更早地修剪分支,与仅依赖min_samples_leaf相比,这可能会稍微加快训练速度。最大叶节点数(max_leaf_nodes)除了直接控制深度之外,还可以限制树中终端节点(叶节点)的总数。树的生长方式是最大化杂质减少,直到达到最大叶节点数。影响: 这提供了一种控制树复杂度的替代机制。叶节点数量有限的树可能会非对称生长,在杂质减少显著的一些分支中变得更深,而在其他分支中保持较浅。正则化效果: 限制了树可以创建的独立预测区域的总数。与max_depth的比较: 限制叶节点有时比限制深度提供更大的灵活性。深度受限的树通常对称生长(在某些实现或概念中是逐层生长),而叶节点受限的树可能更好地适应数据的结构(最佳优先或逐叶生长)。在许多实现中(如LightGBM的默认逐叶生长),max_leaf_nodes通常被认为是比max_depth更直接的复杂度控制方式。当设置了max_leaf_nodes时,max_depth可能会变得冗余或影响力较小。最小杂质减少/最小分裂增益(min_impurity_decrease、min_split_gain,XGBoost中的gamma)树算法选择能最大化杂质度量减少(例如回归任务中的均方误差,或分类任务中的基尼/信息熵)或最大化特定增益标准(如XGBoost目标函数中使用的)的分裂点。此参数为该减少或增益设置了一个阈值。影响: 只有当分裂提供的改进(杂质减少或目标增益)大于或等于此阈值时,才会执行分裂。正则化效果: 这是一种预剪枝的形式。它阻止树进行那些只提供微小增益的分裂,这些分裂更可能是拟合训练数据中的噪声,而不是捕获真实的潜在模式。为此参数设置一个正值会导致更保守的树生长。考量: 此参数的量级很大程度上取决于损失函数和数据集。例如,XGBoost的gamma与在叶节点上进行进一步划分所需的最小损失减少量有关。调整此参数通常需要通过实验来确定。digraph G { rankdir=TB; node [shape=box, style=filled, fillcolor="#ced4da", fontname="sans-serif"]; edge [arrowhead=vee, fontname="sans-serif"]; subgraph cluster_0 { label = "无限制树示例"; style=dashed; bgcolor="#f8f9fa"; N0 [label="特征 A <= 5\n样本数=100", fillcolor="#a5d8ff"]; N0_L [label="特征 B <= 3\n样本数=60", fillcolor="#96f2d7"]; N0_R [label="叶节点 1\n样本数=40", shape=ellipse, fillcolor="#ffec99"]; N0 -> N0_L [label="真"]; N0 -> N0_R [label="假"]; N0_L_L [label="叶节点 2\n样本数=20", shape=ellipse, fillcolor="#ffec99"]; N0_L_R [label="特征 C <= 7\n样本数=40", fillcolor="#96f2d7"]; N0_L -> N0_L_L [label="真"]; N0_L -> N0_L_R [label="假"]; N0_L_R_L [label="叶节点 3\n样本数=35", shape=ellipse, fillcolor="#ffec99"]; N0_L_R_R [label="叶节点 4\n样本数=5", shape=ellipse, fillcolor="#ffc9c9"]; // 小叶节点 N0_L_R -> N0_L_R_L [label="真"]; N0_L_R -> N0_L_R_R [label="假"]; } subgraph cluster_1 { label = "受限树(例如,min_samples_leaf=10)"; style=dashed; bgcolor="#f8f9fa"; M0 [label="特征 A <= 5\n样本数=100", fillcolor="#a5d8ff"]; M0_L [label="特征 B <= 3\n样本数=60", fillcolor="#96f2d7"]; M0_R [label="叶节点 A\n样本数=40", shape=ellipse, fillcolor="#ffec99"]; M0 -> M0_L [label="真"]; M0 -> M0_R [label="假"]; M0_L_L [label="叶节点 B\n样本数=20", shape=ellipse, fillcolor="#ffec99"]; M0_L_R [label="叶节点 C\n样本数=40", shape=ellipse, fillcolor="#ffec99"]; // 分裂被阻止/剪枝 M0_L -> M0_L_L [label="真"]; M0_L -> M0_L_R [label="假"]; } }示例展示了像min_samples_leaf=10这样的限制如何阻止本会创建一个小叶节点(叶节点4有5个样本,现成为叶节点C的一部分,叶节点C有40个样本)的分裂。这些结构性限制是需要调优的超参数,通常通过交叉验证进行,同时还有其他提升参数,如学习率和树的数量。找到合适的平衡可以防止单棵树变得过度专业化,从而得到一个泛化能力更强的最终集成模型。