过度拟合:没有银弹吗?


21

我的理解是,即使遵循正确的交叉验证和模型选择程序,如果人们对模型的搜索足够困难就会出现过度拟合的情况,除非对模型的复杂性,期限施加了限制。此外,很多时候人们尝试从数据中学习对模型复杂性的惩罚,这会破坏他们可以提供的保护。

我的问题是:以上陈述有多少真相?

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


您是在询问ML专用模型还是一般的多元模型?
rumtscho

@rumtscho ML中的所有内容。
阿梅里奥·瓦兹克斯·雷纳

1
@CagdasOzgenc:感谢“搜索空间(考虑的模型)越大,结果越差”。不知道您在这里指的是什么级别的抽象“搜索空间”,但是通过“努力尝试”,我当然意味着搜索越来越多的模型,从而增加了“元模型”的复杂度/搜索空间。 (如果您愿意)我们正在努力适应。
阿梅里奥·瓦兹奎兹·雷纳

Answers:


8

并不是一个完整的答案,而是人们在本次讨论中忽略的一件事是(例如)交叉验证的含义,您为什么使用它以及它涵盖了什么?

我发现搜索过分困难的问题是,人们正在做的简历通常在一个模型中。通过设置folds=模型拟合过程的参数轻松实现。但是,当您使用多个模型甚至创建多个模型的多个过程时,您会添加没有包装在CV中的另一或第二层。

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


1
+1。使用运行网格搜索(模型选择)的CV的单个(或太少)CV进行模型选择肯定会导致过度拟合(对于任何有兴趣的人,我建议例如本文及其中的资源)。我已经阅读过有关“目标改组”的文章(对于其他读者,我推荐这个博览会),但是我自己从未使用过。我想知道是否也可以滥用它(例如,进行多次测试最终导致误报,从而再次搜索“足够困难”(?))。
Amelio Vazquez-Reina

7

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

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

如果我处在静态数据集少于2,000-3,000个观察值的位置(例如:难以获得的医学数据),那么我通常只使用线性模型,因为我经常看到梯度过度拟合在足够小的数据集上增强和支持矢量机。另一方面,我曾与一位顶尖的Kaggler(排名前5%)进行了交谈,他说他为每场比赛建立了数以万计的模型,然后在最后的合奏中使用了数千个模型进行集成。他说,这是他在最终排行榜上取得成功的主要原因。


1
是的 我曾处理过数以百万计的观测数据。无论我尝试进行哪种验证(kfold,自举,甚至是简单的保持),模型都几乎没有变化。随着数据的增加,您对验证方式的关注就越少。
里卡多·克鲁兹

换句话说,没有一个模型具有足够的自由度来“存储”数百万个观测值。
里卡多·克鲁兹

5

很大程度上取决于规模。我希望我可以指望拥有超过2,000-3,000个类似@RyanZotti的案例;我很少有那么多的1/10。在“大数据”机器学习人员和从事生物医学等领域工作的人员之间,这是一个很大的观点差异,这可能解释了您在本网站上会发现的一些不同观点。

我将对我对这个问题的看法进行启发式解释。如Wikipedia页面所述,过度拟合的基本问题是案例数与您要评估的参数数之间的关系。因此,从一个粗略的想法开始,如果您有M个模型,则在每个模型中选择p个参数,然后在每个模型中选择p个参数,那么总的来说,您将在Mp个参数的顺序上进行评估。

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

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

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

因此,与这里的许多问题一样,唯一合理的答案是:“取决于情况”。在这种情况下,它取决于案件数量与所检查参数的有效数量之间的关系,以及所施加的惩罚程度。


2

我认为这是一个很好的问题。我一直想在带有真实数据的交叉验证实验中观察“ U”形曲线。然而,我与现实世界的数据(〜5年信用卡交易和教育方面的数据),经验告诉我在装修可以很容易地在发生巨大的量(十亿行)现实世界的数据

我经常观察到,您可以在适合训练集的情况下尽力而为,但是您不能做太多(例如,将损失减少到0),因为训练集确实很大并且包含很多信息和噪音。

同时,您可以在测试数据上尝试最复杂的模型(不进行任何正则化),它看起来比使用正则化的模型还好,甚至更好。

最后,我认为我的陈述只有在您拥有数十亿个训练数据点的情况下才是正确的。直观地讲,数据要比您建模的要复杂得多,因此您不会过分适应。对于十亿行数据,即使您使用的是带有数千个参数的模型,也很好。同时,您无法承担建立具有百万个免费参数的模型所需的计算。

在我看来,这也是为什么神经网络和深度学习近来流行的原因。与Internet上数十亿张图像相比,您可以负担得起的任何训练模型都不足以适应。


1

我同意@ ryan-zotti的观点,即努力搜索并不一定会导致过度拟合-或至少不会导致过度拟合,因此我们将其称为过度拟合。让我尝试就此发表自己的观点:

盒子曾经说过:

记住所有模型都是错误的。实际的问题是,它们必须是多么的错误才能变得无用。

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

错误的模型还包括过度拟合和欠拟合1个。但是我们不一定会在乎甚至注意到它。问题是,我们a)可以衡量多少,b)可以发现不称其为过度拟合或欠拟合的模型量是多少,因为两者都将对我们将要构建的所有模型施加一点点。如果最终我们的模型满足我们的要求,但例如过度/欠拟合仅是最小的,或者在我们的应用案例中未考虑的部分(可能)数据的过度/欠拟合,我们将接受它-不一定要防止一切过度-/安装不足。

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

因为:最后,我们总是会出现模型错误/过拟合/欠拟合- 在我们关注的焦点范围内检测/测量此错误以做出重要选择的能力。


1个a)每个模型都同时存在偏差和方差问题(我们通常会尝试找到合适的折衷方案来满足我们的需求)。满足我们要求的模型必定仍然存在偏差和方差。b)将噪声数据和非代表性样本视为过度拟合的原因。每个模型必然会模型噪声以及模型,其中的部分信息丢失的关系,所以关于哪些错误的假设必然进行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.