过拟合和剪枝
使用上述算法,我们可以训练一个决策树,该决策树可以对训练样本进行完美分类(假设样本是可分隔的)。但是,如果数据集包含噪声,该树将过拟合数据,测试准确率不佳。
下图显示了一个噪声数据集,在特征 x 和标签 y 之间具有线性关系。该图还显示了利用此数据集训练的决策树,无需任何类型的正则化。此模型可正确预测所有训练样本(模型的预测结果与训练样本一致)。但是,对于包含相同线性模式和不同噪声实例的新数据集,模型的性能会很差。
图 12. 噪声数据集。
为了限制决策树的过拟合,请在训练决策树时应用以下一个或两个正则化条件:
- 设置最大深度:防止决策树增长到超过最大深度(例如 10)。
- 设置叶中的样本数下限:如果叶中的样本数少于特定数量,则不考虑对叶子进行拆分。
下图说明了每叶具有不同最小样本数的影响。模型捕获的噪声较少。
图 13. 每个叶中的样本数下限不同。
您还可以在训练后通过选择性地移除(剪枝)某些分支(即通过将某些非叶节点转换为叶节点)来进行正则化。选择要移除的分支的常见解决方案是使用验证数据集。也就是说,如果移除某个分支可改善验证数据集上的模型质量,则该分支会被移除。
下图说明了这一想法。在这里,我们测试如果非叶绿色节点变为叶节点(即剪除橙色节点),决策树的验证准确率是否会提高。
图 14. 将某个条件及其子项剪成叶子。
下图说明了使用 20% 的数据集作为验证数据来剪除决策树的效果:
图 15. 使用 20% 的数据集来剪除决策树。
请注意,使用验证数据集可减少决策树初始训练的可用样本数。
许多模型创建者会应用多个条件。例如,您可以执行以下所有操作:
- 每叶应用最少数量的样本。
- 应用最大深度来限制决策树的增长。
- 剪枝决策树。
- 示例数量下限为 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”个样本训练最终决策树。
在本部分中,我们讨论了决策树限制过拟合的方法。尽管采用了这些方法,但欠拟合和过拟合却是决策树的主要弱点。决策森林引入了限制过拟合的新方法,我们稍后将对此进行介绍。
直接决策树解释
决策树易于解读。也就是说,即便更改几个示例,也可能完全改变决策树的结构,进而彻底改变决策树。
由于决策树的构建方式、对训练样本的分区,您可以使用决策树来解释数据集本身(而不是模型)。每个叶代表数据集的一个特定角。
model.describe()
函数查看树。您还可以使用 model.get_tree()
访问和绘制各个树。如需了解详情,请参阅
YDF 的模型检查教程。但间接的解读也具有参考价值。