过度拟合:没有灵丹妙药?

机器算法验证 机器学习 交叉验证 拟合优度 scikit-学习 插入符号
2022-02-02 02:45:05

我的理解是,即使遵循适当的交叉验证和模型选择程序,如果搜索模型足够努力,也会发生过度拟合,除非对模型复杂性施加限制。此外,人们经常试图从数据中学习对模型复杂性的惩罚,这会破坏他们可以提供的保护。

我的问题是:上面的陈述有多少真实性?

我经常听到 ML 实践者说:“在我的公司/实验室,我们总是尝试所有可用的模型(例如,来自像caretscikit-learn 之类的库中的模型),看看哪个模型最有效”。我经常争辩说,即使他们认真对待交叉验证并以他们想要的任何方式保留保留集,这种方法也很容易过拟合。此外,他们搜索得越努力,他们越有可能过度拟合。换句话说,过度优化是一个真正的问题,没有任何启发式方法可以帮助您系统地对抗它。我这样想有错吗?

4个回答

不是一个完整的答案,但人们在这个讨论中忽略的一件事是交叉验证(例如)是什么意思,你为什么使用它,它涵盖了什么?

我发现搜索太难的问题是人们正在做的简历通常在一个模型中。folds=通过设置模型拟合过程的参数很容易做到。但是,当您使用多个模型,甚至是用于创建多个模型的多个过程时,您会添加另一层或两层您没有包含在 CV 中的层。

所以他们应该使用嵌套的简历。他们还应该在整个过程中使用“目标改组”(重采样/置换测试),看看如果你打破因变量和自变量之间的关系,他们的程序会做得如何——即你比随机做的好多少考虑你的整个过程?

在我 4 年左右的经验中,我发现尝试插入符号(或 scikit-learn)中可用的每个模型并不一定会导致过度拟合。我发现如果你有一个足够大的数据集(10,000+ 行)并且类的平衡或多或少(即没有像信用风险或营销问题那样的类不平衡),那么过度拟合往往是最小的。值得注意的是,我对调整参数的网格搜索往往每个模型不超过 30 个排列。在极端情况下,如果您对每个模型使用 100 或 1,000 个排列,您可能会过拟合。

您提出问题的方式使答案变得非常简单:在极端情况下,是的,如果不确定的话,可能会过度拟合。没有灵丹妙药,我怀疑有人会提出其他建议。然而,仍然存在相当广泛的范围,其中过度拟合的程度最小到可以接受。在您的验证保留集中拥有大量不可见的数据肯定会有所帮助。拥有多个不可见的验证保持集会更好。我很幸运能够在一个每天都有大量新数据出现的领域工作。

如果我被困在少于 2,000-3,000 个观察值的静态数据集(例如:很难获得的医学数据)的位置,我通常只使用线性模型,因为我经常看到梯度过度拟合在足够小的数据集上提升和支持向量机。另一方面,我与一位顶级 Kaggler(前 5%)交谈过,他说他为每场比赛构建了数万个模型,然后将它们集成在一起,在他的最终集成中使用了数千个模型。他说这是他在最终排行榜上取得成功的主要原因。

很大程度上取决于规模。我希望我能指望像@RyanZotti 通常拥有的超过 2,000-3,000 个案例;我很少有这么多的 1/10。这是“大数据”机器学习人员和在生物医学等领域工作的人员在视角上的巨大差异,这可能解释了您会在本网站上找到的一些不同视角。

我将介绍我对这个问题的看法的启发式解释。维基百科页面所述,过度拟合的基本问题是案例数量与您正在评估的参数数量之间的关系。所以从一个粗略的想法开始,如果你有M个模型,你正在选择其中每个模型有p个参数,那么你正在评估总共Mp个参数的顺序。

如果存在过度拟合的危险,有两种通用方法可以退回到更通用的模型:减少参数数量或以某种方式惩罚它们。

拥有足够大的数据集,您可能永远不会接近过度拟合。如果您有 20,000 个案例和 20 个不同的模型,每个模型有 100 个参数,那么即使没有惩罚,您也可能不会遇到麻烦,因为每个有效参数仍然有 10 个案例。不要尝试仅使用 200 个案例的建模策略。

模型平均可能被认为是一种惩罚形式。在@RyanZotti 引用的 Kaggler 示例中,案例的数量可能是巨大的,最终集成中的“数千个”模型中的每一个单独贡献了最终模型的一小部分。任何特定于特定贡献模型的过度拟合都不会对最终结果产生很大影响,而且 Kaggler 比赛中的大量案例进一步降低了过度拟合的危险。

所以,就像这里有很多问题一样,唯一合理的答案是:“这取决于。” 在这种情况下,它取决于案例数量与检查的有效参数数量之间的关系,以及应用了多少惩罚。

我同意@ryan-zotti 的观点,即足够努力的搜索并不一定会导致过度拟合——或者至少不会导致我们称之为过度拟合的程度。让我试着陈述我对此的看法:

盒子曾经说过:

请记住,所有模型都是错误的;实际的问题是它们有多大的错误才没有用。

(完美将需要所有数据,这反过来将首先消除对模型的需求)。

模型错误还包括过拟合和欠拟合1. 但我们不一定会关心甚至注意到它。问题是,我们可以 a) 完全测量偏离现实的模型的多少,并且 b) 认为不称之为过度拟合或欠拟合是可以接受的——因为两者都会我们将要构建的所有模型应用一点点。如果我们的模型最终满足我们的要求,但例如过拟合/欠拟合只是最小限度,或者在我们的应用案例中未考虑的(可能)数据的部分过拟合/欠拟合,我们会接受它 - 这不一定是为了防止一切-/欠拟合。

这归结为一个适当的设置来测量/检测模型错误,以确定这是否是我们想要的。因此,我们可以做的是通过尝试获得具有最小噪声和代表性+足够样本的数据,尽可能地建模、评估和选择,并以合理的方式(例如很少样本,许多功能不太复杂的模型;选择具有可接受性能的最简单的模型等)。

因为:最终我们将始终存在模型错误/过度拟合/欠拟合——在我们感兴趣的焦点范围内检测/测量此错误的能力以做出合理的选择很重要。


1a) 每个模型同时存在偏差和方差问题(我们通常会尝试找到合适的权衡来满足我们的需求)。满足我们要求的模型必然仍然存在偏差和方差。b) 考虑噪声数据和非代表性样本作为过度拟合的原因。每个模型都必须对噪声进行建模,并对缺少部分信息的关系建模,因此必然会做出错误的假设。