交叉验证与数据窥探有何不同?

机器算法验证 机器学习 交叉验证
2022-02-07 03:54:42

我刚读完《统计学习导论》我想知道使用交叉验证为各种机器学习技术找到最佳调整参数是否不同于数据窥探?

我们反复检查调整参数的哪个值会在测试集中产生最佳预测结果。如果我们得到的调优参数恰好适合这个特定的测试集,并且在未来的某些测试集上表现不佳怎么办?

请原谅我对机器学习的新手理解,我渴望接受教育。

编辑:请参阅@AdamO 关于“数据窥探”定义的答案。我在我的问题中非常不准确地使用了这个词。

4个回答

我想知道使用交叉验证为各种机器学习技术找到最佳调整参数是否不同于数据窥探?

您的关注是正确的,并且有很多关于这个主题的文献,例如

问题是使用交叉验证的超参数调整是一个数据驱动的优化过程,并且仍然倾向于过度拟合你的数据集(少于通过重新替换错误进行的调整,但仍然如此)。尝试将调整交叉验证结果用作“独立”性能度量就像吃馅饼(=调整)并保持(=测量最终模型性能)它。

这并不意味着您不应该使用交叉验证来调整超参数。这只是意味着您只能将其用于一个目的。出于验证目的优化或测量模型性能。

解决方案是您需要进行独立验证,以测量使用调整后的超参数获得的模型的质量。这称为嵌套或双重验证。您将在此处找到有关这些主题的许多问题和答案

从概念上讲,我想说训练包括各种花哨的步骤,不仅适合“通常”的模型参数,还适合(自动调整)超参数。因此,λ 的数据驱动优化显然是模型训练的一部分。

根据经验,您也可以说模型训练是在您拥有能够为新案例生成预测的即用型最终黑盒函数之前需要完成的一切。


PS:我发现测试与验证术语非常混乱,因为在我的领域中,“验证”意味着证明最终模型适合目的,因此其他人称之为测试而不是验证。我更喜欢称内部测试集“调整测试集”和外部“最终验证测试集”等。


更新:

因此,如果我的模型(即本例中的调优参数)未能通过外部验证,那我该怎么办?

通常,这不是刚刚发生的事情:有可能导致此类故障的典型情况。我知道的所有这些情况都是过度拟合的情况。您需要注意,虽然正则化有助于减少必要的训练案例数量,但数据驱动的优化需要大量数据。

我的建议:

  • 通常,您(应该)已经有了粗略的期望,例如应该达到什么性能,您认为什么样的性能看起来很漂亮。或者指定您需要达到的性能和基准性能。从中和可用训练案例的数量(对于您决定的拆分方案),计算内部(调整)测试的预期不确定性。如果这种不确定性表明您无法进行有意义的比较,请不要进行数据驱动的优化。

  • 您应该检查使用所选 λ 获得的预测和通过自动调整过程找到的最佳 λ 的稳定性。如果 λ 相对于数据的不同拆分不太稳定,则优化不起作用。

  • 如果您发现您将无法进行数据驱动的优化,或者它根本不起作用,您可以根据您的专业知识选择 λ,例如从类似数据的经验中选择。或者,如果您发现优化失败,您将需要更强的正则化:导致失败的过度拟合适用于过于复杂的模型。

交叉验证用于评估特定发现的有效性,通常与预测模型密切相关。这些发现可以包括聚类分析、分类或预测模型的结果。无论如何,分析的性质是预先指定的科学兴趣问题的一部分,例如“哪些 mRNA 表达频率最有可能来自乳腺癌活检而不是健康对照?”。交叉验证是一种非常可靠的方法,用于评估服务于特定目的的预先指定的预测模型的有效性。我怀疑折交叉验证可能是您困惑的根源。k

当使用 CV 来识别“最佳”调整参数时,正如惩罚似然方法所需要的那样,通常有一个预先指定的标准,该过程被设置为满足。这可能是最小 MSE、最大 AUC 或最小 BIC。我认为,如果您选择一个来提供您所追求的结果,那么您所做的事情比数据疏浚更糟糕。因此,使用微阵列示例,如果您对哪些蛋白质在癌症病例中的表达量高于对照组感兴趣,您可以预先指定 GLM LASSOλλ给出最好的 BIC,并在最终模型中选择标记作为候选蛋白质进​​行进一步研究。这是一个特征选择的例子。

“数据窥探”或者我可以称之为“探索性数据分析”不处理预先指定的问题。你会列举一些可能的、看似有趣的结果并单独评估它们。您可以执行任意数量的探索性分析,而且通常不必担心多次测试。您可以使用交叉验证单独评估每个探索性分析,但当您拥有超过 1 个探索性分析时,它不会固有地考虑多重测试。这种情况下的假设可能非常广泛和深远,“哪些因素与前列腺癌有关?” (在一个队列中测量咖啡饮用、输精管结扎使用等)。显着结果被视为“产生假设”,不提供确证证据。

因此,虽然这两种方法在本质上都有些“迭代”,但它们是完全独立的过程。k- 折叠交叉验证是一种工具,用于评估一组特定结果的不确定性和有效性,这些结果是“模块化”假设的一部分。数据挖掘、数据窥探或探索性数据分析旨在基于由综合和大型数据集解决的大量可能有趣的问题生成假设。

实际上,在 CV 期间,您会尝试在验证集上找到最佳参数,这与测试集不同。您将整个数据分成三组:训练集、验证集和测试集。当你正确地进行交叉验证时,你永远不会看到测试结束直到最后,所以根本没有窥探。对测试集进行交叉验证是一个严重(但频繁)的方法错误。

如果您以 Lasso 示例查看“统计学习简介”的第 225 页,您会发现它们实际上进行了嵌套交叉验证。即模型选择是在cv.glmnet一个train集合中完成的,该集合被cv.glmnet包分成训练测试对。模型验证是在验证(“ test”)集合上完成的,所以它是独立的验证。