与其他模型相比,随机森林具有近乎完美的训练 AUC

机器算法验证 机器学习 广义线性模型 随机森林 scikit-学习 助推
2022-03-23 21:40:09

我正在研究一个类大小非常不平衡的 2 类分类问题(95% 对 5%)。整体数据大小为 500k+,我进行了 70%-30% 的训练测试拆分。到目前为止,我已经尝试了以下模型(全部sklearn):

  1. 逻辑回归:训练 AUC ~0.5,测试 AUC ~0.5
  2. 梯度提升:训练 AUC ~0.74,测试 AUC ~0.69
  3. 随机森林:训练 AUC 0.9999999,测试 AUC ~0.80

我看到了随机森林的完美 AUC,但在测试集上只有 ~0.8。#1 和 #2 中的数字对我来说看起来很正常,但我真的很害怕随机森林训练集上的“完美”AUC。

这是我应该预料到的还是在正常范围内?为什么这发生在随机森林而不是其他分类器?对此有什么合理的解释或猜测吗?


更新:我对随机森林模型进行了 10 倍 cv 和参数网格搜索,结果如下:

  1. 随机森林(原始):训练 AUC 0.9999999,测试 AUC ~0.80
  2. 随机森林(10 倍 cv):平均测试 AUC ~0.80
  3. 随机森林(网格搜索最大深度 12):训练 AUC ~0.73 测试 AUC ~0.70

我可以看到,通过网格搜索的最佳参数设置,训练和测试 AUC 不再那么不同,对我来说看起来很正常。然而,这个 0.71 的测试 AUC 比原始随机森林的测试 AUC (~0.80) 差得多。

如果是过拟合的问题,正则化后,测试的AUC应该会增加,但是现在和我相反,我很困惑。

我在这里有什么遗漏吗?为什么会这样?如果我要在这两种模型之间进行选择,我会选择具有更高测试 AUC 的模型,即“可能”过度拟合的随机森林,这有意义吗?

3个回答

由于 ML 算法可以最大限度地减少训练中的错误,因此该数据的预期准确性“自然”会比您的测试结果更好。有效地,当训练误差太低(又名准确度太高)时,可能出现了问题(又名过度拟合)

根据 user5957401 的建议,您可以尝试交叉验证训练过程。例如,如果您有大量实例,则 10 折交叉验证就可以了。如果您还需要调整超参数,则需要进行嵌套交叉验证。

通过这种方式,来自测试集的估计​​误差将“接近”预期误差(也就是你将在真实数据上得到的误差)。通过这种方式,您可以检查您的结果(测试集上的 AUC 0.80)是否是一个很好的估计,或者您是否偶然得到了这个

您还可以尝试其他技术,例如在交叉验证任务之前对数据进行多次混洗,以提高结果的可靠性。

在此处输入图像描述

大家好!对不起我的英语不好。我不明白,所以你的问题是关于模型选择的问题。您必须想要最好的测试错误,而不是训练和测试错误之间的相似性。图像中的最小值显示了您的目标,为了确定您的决定,您可以绘制误差与复杂度的关系图(深度 pod、树或最小样本叶)。事实上,模型中的最佳参数安全地将训练误差低于 0.999。

随机森林有很多很多的自由度,因此它们相对容易达到在样本中具有接近 100% 准确度的程度。这只是一个过拟合问题。可能您想使用一些调整参数来降低模型复杂性(减少树深度,提高最小节点大小等)。某种程度的交叉验证会在这里为您提供帮助。或者,它仍然具有最佳的 oob 性能,因此您可以随便使用它。