如何在不过度拟合的情况下计算理想的决策树深度?

数据挖掘 scikit-学习 决策树 参数估计
2022-02-28 13:33:32

什么是寻找决策树(在 SKLearn 中)的最佳深度的好方法?我如何判断我是否已经过深并且过度拟合?我知道我可以用 fe GridSearchCV 找到最好的参数,但最好的分数可能并不意味着我得到了最好的分类器,因为我可能会将树过度拟合到数据中。

2个回答

不!验证集上的最佳分数意味着您没有处于过度拟合区域。正如我之前对您的问题的回答中所解释的,过度拟合是关于训练数据的高分,但验证的低分。因此,为了避免过度拟合,您需要检查您在验证集上的分数,然后就可以了。据我所知,没有关于决策树最佳深度的理论计算

所以这就是你要做的:

  • 选择多个树的深度来开始一个 for 循环(尝试覆盖整个区域,所以尝试小的和非常大的)
  • 在 for 循环中将数据集划分为训练/验证(例如 70%/30%)
  • 每次在训练数据上使用该深度训练您的决策树并在验证集上对其进行测试,然后保留验证错误(您也可以保留训练错误)
  • 绘制验证错误(您可以将其与训练错误的演变相结合,以获得更漂亮的图表以供理解!)
  • 找到验证错误的全局最小值。
  • 然后,您可以根据找到的值在新的 for 循环中缩小搜索范围,以达到更精确的值

实际上存在过度拟合验证集的可能性。

这是因为验证集是您的参数(在您的情况下为深度)表现最好的集,但这并不意味着您的模型可以很好地概括看不见的数据。

这就是为什么通常将数据分成三组的原因:训练、验证和测试

您在训练集上进行训练,在验证集上调整参数,最后,当您对参数感到满意时,您可以使用测试集整体测试您的模型。通常,测试集上的误差会高于验证测试上的误差。

如果此差异很小,则您接受该模型。但如果它很大,你需要采取行动:

1)重新组织三个集合,因为也许你有集合之间的差异问题;

2)对你的模型添加一些惩罚,作用于正则化参数;或者降低树的深度,如果你只对它感兴趣的话