过拟合和剪枝

我们可以使用上述算法训练一个决策树,它会将训练样本完美分类(假设这些示例是可拆分的)。但是,如果数据集包含噪声,此树将过度适应数据,并显示测试准确率不佳。

下图显示了一个特征 x 与标签 y 之间存在线性关系的嘈杂数据集。该图还显示基于此数据集训练的决策树,且不包含任何类型的正则化。此模型可正确预测所有训练示例(模型的预测结果与训练示例一致)。不过,在包含相同线性模式和不同噪声实例的新数据集上,模型的效果会较差。

一般的斜度为 +1,但由于数据集非常嘈杂,因此各个数据点有时远离最佳线。

图 12. 有噪声数据集。

 

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

  • 设置最大深度:阻止决策树超过最大深度(例如 10)。
  • 设置叶项数量下限:如果叶数低于一定数量的叶子,则不会被考虑拆分。

下图说明了每叶不同的最小样本数量的影响。模型会减少噪声。

三个图表,每个图表显示叶子数量下限的数值的不同。不同的值为 2、5 和 10。

图 13. 每颗叶的最小样本数量不同。

您也可以在训练后进行选择性移除(删减)某些分支(即将某些非叶节点转换为叶子)。选择要移除的分支的常见解决方案是使用验证数据集。也就是说,如果移除分支可以提高验证数据集上模型的质量,系统会移除该分支。

下图说明了此创意。在这里,我们会测试当非叶绿色节点变成叶子(即剪枝橙色节点)时,决策树的验证准确性是否会提高。

两棵决策树。一个决策树包含 9 个节点,另一个节点通过将其中一个条件变成叶子,截回为 6 个节点。

图 14. 将某个条件及其子级剪到叶子中。

 

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

该图表显示的是一条粗糙过拟合模型与直线理想模型的对比图

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

 

请注意,使用验证数据集可减少对决策树进行初始训练时可用的示例数量。

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

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

这些条件引入需要调整的新超参数(例如最大树深度),通常通过自动超参数调节进行。决策树通常具有足够快的训练速度,能够训练用于交叉验证的超参数调节。例如,用于包含“n”样本的数据集:

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

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

直接决策树解释

决策树非常易于解读。尽管如此,即使只更改几个示例,也可能会彻底改变决策树的结构,进而改变我们对决策树的解释。

由于决策树的构建方式,对训练示例进行分区,因此您可以使用决策树解读数据集(而不是模型)。每个叶代表数据集的特定角。

在 TF-DF 中,您可以使用 tfdf.model_plotter.plot_model_in_colab() 函数绘制决策树。

不过,间接解释也包含丰富的信息。