对参数/模型调整的嵌套交叉验证的每一折的直观理解

机器算法验证 分类 交叉验证 优化 模型选择
2022-03-15 22:17:06

该站点上有几个问题,主要是询问用于参数调整的嵌套交叉验证是如何工作的。很多答案使用了一些我觉得难以理解的行话,但据我所知,我开发的嵌套交叉验证的直观理解如下:

在标准交叉验证中,如果您有 8 次“运行”,您将在 7 次运行中训练分类器并在剩余的运行中进行测试。你这样做 8 次,这样每次运行都是一次“测试集”(因此,8 折交叉验证)

在嵌套交叉验证中,训练集本身要经过 6 次运行训练集和 1 次运行验证集的交叉验证(因此有自己的 7 个“内部折叠”)。您可以通过使用它们训练 6 次运行的训练集并在 1 次运行的验证集上进行测试来测试许多不同的参数组合、核函数、特征选择方法等。你重复,这样每个集合都像正常的交叉验证一样轮流作为验证集。通过此“内部”交叉验证测试所有模型组合后,您可以在所有内部折叠中选择性能最佳的模型,然后使用所选模型训练整个 7 次运行训练集,并使用具有的原始测试集进行测试没有被内循环触及。

刚刚描述了“外环”的一折(以及外环内的“内环”的七折)。现在你再做一遍,每个折叠轮流作为在外循环中等待的“测试”集。

以上是我理解的嵌套交叉验证。我有一个一般性问题和一个具体问题。

  1. 从广义上讲,我是否误解了任何明显的东西?
  2. 我刚刚描述的内容可能会为数据的每个“外部折叠”(也就是不同的参数选择、特征选择等)产生不同的模型。这是有效/正确的吗?它/感觉/对我无效。如果无效,那么我是否应该先执行所有内部循环而不执行单个外部循环,找到整体最佳模型,然后使用相同模型运行所有 8 个外部折叠?
1个回答
  1. 您的理解对我来说听起来不错,但可能的例外是,如果测试数据是指测试数据,则您在我的领域中所谓的“运行”被称为折叠(如在 5 折交叉验证中),或者如果我们正在谈论,则称为“代理模型”该模型。

  2. 是的,外部折叠可以返回不同的超参数集和/或参数(系数)。
    在允许发生这种情况的意义上,这是有效的。从某种意义上说,这意味着优化(在内部折叠的帮助下完成)不稳定是无效的,因此您实际上还没有找到“该”[全局]最优。

对于整个模型,您应该对整个数据集再次运行内部交叉验证。即,您优化/自动调整训练集(现在是整个数据集)上的超参数,就像在外部交叉验证期间所做的一样。


更新:更长的解释

另请参阅用于模型选择的嵌套交叉验证和嵌套交叉验证后如何构建最终模型和调整概率阈值?

您是说要获得“[全局] 最优”,您需要在 c、gamma、内核等的所有组合上运行整个数据集?

不。根据我的经验,问题不在于没有详细探索搜索空间(所有可能的组合),而是我们对结果模型性能的测量存在不确定性。

许多来自数值优化的优化策略隐含地假设目标函数上的噪声可以忽略不计。即泛函基本上是超参数的平滑、连续函数。根据您优化的品质因数和您拥有的案例数量,可能会或可能不会满足此假设。

如果您对品质因数的估计确实有相当大的噪音但没有考虑到这一点(即您提到的“选择最佳”策略),那么您观察到的“最佳”会受到噪音的影响。
此外,性能估计的噪声(方差不确定性)随着模型复杂性的增加而增加。在这种情况下,天真的“选择最佳观察性能”也可能导致对过于复杂的模型的偏见。

参见例如Cawley, GC & Talbot, NLC:On Over-fitting in Model Selection and Subsequent Selection Bias in Performance Evaluation,机器学习研究杂志,11, 2079-2107 (2010)。

这如何纳入嵌套交叉验证程序或分析的最终结果?

Hastie, T. 和 Tibshirani, R. 和 Friedman, J. 统计学习的要素;数据挖掘、推理和预测 Springer Verlag,纽约,2009年第 7.10 章中说:

“单一标准误差”规则通常与交叉验证一起使用,在该规则中,我们选择最简约的模型,其误差不超过最佳模型误差的一个标准误差。

我发现这是一个很好的启发式方法(由于案例数量有限以及模型不稳定性,我采取了额外的预防措施来估计方差不确定性- 统计学习要素在他们的交叉验证章节中没有讨论这个问题)。


所以你的理解:

我很困惑,因为我的理解是你不能只用不同的参数/内核运行你的分析数百/数千次并选择最好的

是正确的。

不过,你的理解

(并且嵌套的 CV 应该可以缓解相关问题)。

可能正确也可能不正确:

  • 嵌套 CV 不会使超参数优化更加成功,
  • 但它可以诚实地估计使用该特定优化策略可以实现的性能。

  • 换句话说:它可以防止对实现的性能过度乐观,但它并没有提高这种性能。


最终模型:

  • 嵌套 CV 的外层拆分基本上是用于验证/验证的普通 CV。它将可用数据集拆分为训练和测试子集,然后使用训练集构建所谓的代理模型。
  • 在此培训期间,您碰巧做了另一个(内部)CV,您使用其性能估计来修复/优化超参数。但从外表看,这只是模型训练的一部分。
  • 整个数据集的模型训练应该和交叉验证的模型训练一样。否则,代理模型及其性能估计将不能很好地替代在整个数据上训练的模型(这确实是代理模型的目的)。

  • 因此:就像在交叉验证期间一样,对整个数据集运行超参数的自动调整。要考虑的超参数组合相同,选择最优值的策略相同。简而言之:相同的训练算法,只是数据略有不同(1/k 附加案例)。