决策树过拟合检验
Posted
技术标签:
【中文标题】决策树过拟合检验【英文标题】:Decision tree overfit test 【发布时间】:2021-02-06 16:22:00 【问题描述】:我目前正在处理容易过拟合的数据,因此我在 sklearn 上读到 max_depth 通常是树过拟合的原因时,通过测试每个深度的 roc_auc 分数来制作函数。但我不确定我的想法是否正确这里有我的结果图片:
我也尝试使用后修剪方法,但我的图表看起来与我在互联网上找到的其他图表完全不同,所以我不确定它给了我什么
【问题讨论】:
【参考方案1】:您要查找的术语是cross-validation。基本思想很简单:将数据集拆分为训练和验证(或测试)集。然后在训练集上训练一个模型并在验证集上对其进行测试。如果您的模型过度拟合,它将在训练集上表现良好,但在验证集上表现不佳。在这种情况下,最好降低模型复杂性或添加所谓的正则化(例如树修剪)。也许,在 SciKit Learn 中执行交叉验证的最简单方法是使用 cross_val_score
函数,如 here 所述。
注意 1: 在某些情况下(例如在神经网络中),既有验证集,也有测试集(除了训练集)。我不会在这里详细介绍,但不要在不同的上下文中与这些术语混淆。
注意 2: 交叉验证是如此标准的东西,它甚至给另一个 StackExchange 站点命名 - Cross Validated,在那里您可以获得更多关于统计信息的答案。另一个可能更合适的网站有一个不言自明的名称 - Data Science。
【讨论】:
谢谢你的回答,我实际上用 cv=10 的 cross_val_score 生成了这些图,所以看看我的结果,我猜我的算法没有过度拟合? 啊,我想我在写答案时只看到了一部分图像,所以它不是很相关,抱歉 :) 是的,如果训练和测试指标接近,这通常意味着你不'没有过度拟合(假设您的样本是独立的)。您的图像 1、3 和 4 看起来没有过度拟合,但图像 2 的模型看起来过度拟合。此外,您的图像 4 看起来可以理解。您对此有顾虑吗? 我看到很少有带有 por pruning 的图,并且在每个具有更高 alpha 测试集的图中都获得了准确性,而在我的图中,它从 1 开始,这就是我担心它的原因。 从其他图表中,我了解到您的数据非常简单,并且模型很好地学习(和概括)了它。这就是为什么即使不修剪你的训练集和测试集的高精度。在更复杂的情况下,如果一棵树完全构建,它往往会过度拟合,因此训练集的准确度开始很高,而测试的准确度开始很低。经过一些修剪(对看不见的数据进行泛化)后,训练准确度下降,而测试准确度增加。所以我们得到像this这样的情节。 哦,好吧,我明白了,还有一个小问题,也许你知道答案,我对分布非常不平衡的特征感到好奇,我有 80% 的 1 个属性,然后 2-3 个非常低的属性%,我可以/应该删除那些列(这就是我所做的)。以上是关于决策树过拟合检验的主要内容,如果未能解决你的问题,请参考以下文章