过拟合和剪枝

使用上述算法,我们可以训练一个决策树,该决策树可以对训练样本进行完美分类(假设样本是可分隔的)。但是,如果数据集包含噪声,该树将过拟合数据,测试准确率不佳。

下图显示了一个噪声数据集,在特征 x 和标签 y 之间具有线性关系。该图还显示了利用此数据集训练的决策树,无需任何类型的正则化。此模型可正确预测所有训练样本(模型的预测结果与训练样本一致)。但是,对于包含相同线性模式和不同噪声实例的新数据集,模型的性能会很差。

一般斜率为 +1,但由于数据集非常杂乱,因此个别数据点有时与最佳拟合线相差很大。

图 12. 噪声数据集。

 

为了限制决策树的过拟合,请在训练决策树时应用以下一个或两个正则化条件:

  • 设置最大深度:防止决策树增长到超过最大深度(例如 10)。
  • 设置叶中的样本数下限:如果叶中的样本数少于特定数量,则不考虑对叶子进行拆分。

下图说明了每叶具有不同最小样本数的影响。模型捕获的噪声较少。

三个曲线图,每个曲线图分别显示不同值对每叶最小样本数的影响。不同的值包括 2、5 和 10。

图 13. 每个叶中的样本数下限不同。

您还可以在训练后通过选择性地移除(剪枝)某些分支(即通过将某些非叶节点转换为叶节点)来进行正则化。选择要移除的分支的常见解决方案是使用验证数据集。也就是说,如果移除某个分支可改善验证数据集上的模型质量,则该分支会被移除。

下图说明了这一想法。在这里,我们测试如果非叶绿色节点变为叶节点(即剪除橙色节点),决策树的验证准确率是否会提高。

两个决策树。一个决策树包含 9 个节点,另一个决策树通过将其中一个条件转变为叶项,将其剪回到仅 6 个节点。

图 14. 将某个条件及其子项剪成叶子。

 

下图说明了使用 20% 的数据集作为验证数据来剪除决策树的效果:

显示不规则过拟合模型的直线理想模型的曲线图

图 15. 使用 20% 的数据集来剪除决策树。

 

请注意,使用验证数据集可减少决策树初始训练的可用样本数。

许多模型创建者会应用多个条件。例如,您可以执行以下所有操作:

  • 每叶应用最少数量的样本。
  • 应用最大深度来限制决策树的增长。
  • 剪枝决策树。
YDF 代码
在 YDF 中,学习算法为所有剪枝超参数预先配置了默认值。例如,以下是两个剪枝超参数的默认值:
  • 示例数量下限为 5 个 (min_examples = 5)
  • 保留 10% 的训练数据集用于验证 (validation_ratio = 0.1)。
您可以通过设置 validation_ratio=0.0 来使用验证数据集停用剪枝。

这些标准引入了需要调节的新超参数(例如最大树深度),通常使用自动超参数调节。决策树通常速度足够快,能够进行训练,以将超参数调节与交叉验证结合使用。例如,对于包含“n”个样本的数据集:

  • 将训练样本划分为 p 个非重叠组。例如:p=10
  • 针对所有可能的超参数值;例如,最大深度为 {3,5,6,7,8,9},最小样本数为 {5,8,10,20}。
    • 针对每个组评估用其他 p-1 组训练的决策树的质量。
    • 各组评估的平均值。
  • 选择平均评估最佳的超参数值。
  • 使用具有所选超参数的所有“n”个样本训练最终决策树。

在本部分中,我们讨论了决策树限制过拟合的方法。尽管采用了这些方法,但欠拟合和过拟合却是决策树的主要弱点。决策森林引入了限制过拟合的新方法,我们稍后将对此进行介绍。

直接决策树解释

决策树易于解读。也就是说,即便更改几个示例,也可能完全改变决策树的结构,进而彻底改变决策树。

由于决策树的构建方式、对训练样本的分区,您可以使用决策树来解释数据集本身(而不是模型)。每个叶代表数据集的一个特定角。

YDF 代码
在 YDF 中,您可以使用 model.describe() 函数查看树。您还可以使用 model.get_tree() 访问和绘制各个树。如需了解详情,请参阅 YDF 的模型检查教程

但间接的解读也具有参考价值。