选择模型后进行交叉验证(错误归纳)


21

注意:大小写为n >> p

我正在阅读《统计学习的元素》,关于交叉验证的“正确”方法有很多提及(例如,第60页,第245页)。具体来说,我的问题是在进行模型搜索时,如何使用k倍CV或自举法评估最终模型(没有单独的测试集)?似乎在大多数情况下(没有嵌入式功能选择的ML算法)

  1. 功能选择步骤
  2. 元参数选择步骤(例如,SVM中的成本参数)。

我的问题:

  1. 我已经看到,可以在整个训练集上进行特征选择并放在一边的情况下,进行特征选择步骤。然后,使用k折CV,在每折中使用特征选择算法(获得每次可能选择的不同特征)并平均误差。然后,您将使用通过所有数据(预留的数据)选择的特征来训练最终模式,但是将交叉验证中的错误用作模型未来性能的估计。它是否正确?
  2. 当您使用交叉验证选择模型参数时,随后如何估算模型性能?您是使用第54页(pdf)所示的嵌套简历还是其他方法,还是上面#1的相同过程?
  3. 当您同时执行两个步骤(功能和参数设置)时.....然后您会做什么?复杂的嵌套循环?
  4. 如果您有单独的保留样本,那么担心会消失吗,您可以使用交叉验证来选择功能和参数(不必担心,因为您的性能估算将来自保留集)?

@ user2040(+1)这些问题确实是非常好的问题!在这里可以找到一个有点相关的问题:在机器学习中执行交叉验证时,“最终”模型的特征选择
chl

@chi谢谢,我看过那个帖子。您认为我的思考过程至少在正确的轨道上吗?似乎独立的测试集使我们在使用CV进行特征选择和模型调整/选择时更加自由。否则,似乎需要嵌套循环来使用相同的训练数据来训练,调整和估计错误概括。
B_Miner 2011年

Answers:


18

要记住的关键是,为了使交叉验证能够提供(几乎)无偏的性能估计,在交叉验证过程的每一个步骤中,还必须独立执行模型拟合中涉及的每个步骤。最好的做法是将特征选择,元/超参数设置和参数优化视为模型拟合的组成部分,并且不要在不执行其他两个步骤的情况下执行任何一个步骤。

正如Cawley和Talbot所证明的那样,通过偏离该配方而产生的乐观偏见可能出乎意料地大,其中明显良性偏离所引起的偏见大于竞争分类器之间的性能差异。更糟糕的是,有偏见的协议最倾向于使用不良模型,因为它们对超参数的调整更加敏感,因此更容易过度拟合模型选择标准!

对特定问题的答案:

第1步中的过程是有效的,因为特征选择是在每个折叠中分别执行的,因此要进行交叉验证的是用于拟合最终模型的整个过程。交叉验证的估计会有轻微的悲观偏差,因为每个折叠的数据集都比最终模型使用的整个数据集要小一些。

对于2,由于使用交叉验证来选择模型参数,因此您需要在用于性能评估的交叉验证的每个折叠中独立地重复该过程,最后得到嵌套的交叉验证。

对于3,从本质上讲,是的,您需要进行嵌套嵌套的交叉验证。本质上,您需要在最外部的交叉验证(用于性能评估)的每个折叠中重复进行所有操作以适合最终模型。

对于4-是的,如果您有单独的保留集,则将无需任何其他交叉验证即可对性能进行无偏估计。


重新回答您对Q1的回答。那不是问题吗?通常,我们认为我们正在交叉验证模型,而实际上我们正在交叉验证建模过程。这种差异可能是哲学上的,因为当您写下数学时,f可以代表模型或建模过程。但是随后有人会问,是对程序进行交叉验证,还是对模型进行交叉验证。你有什么想法
qoheleth 2014年

您无法对模型进行交叉验证,因为该模型取决于对其进行训练的数据样本,因此,一旦将其适合于不同的数据样本,它就是一个不同的模型。我真正要指出的是,如果您以某种方式对整个数据样本进行模型调整(例如,通过执行特征选择),则交叉验证将对泛化进行乐观估计,因为已使用测试分区进行调整模型的各个方面(即所使用的功能集)。HTH。
Dikran有袋动物2014年

我不知道是否可以在评论部分继续我们的讨论,但是直到有人拒绝为止。是的,我了解您关于CV的观点需要在最外层进行,我不反对。实际上,我昨天才给我的同事同样的建议。我只是指出,我们经常不确定要进行交叉验证的内容。同时,我想知道是否真正需要对模型进行评估而不是对建模过程进行评估。可能的解决方法是,可以认为他正在使用过程错误来估计模型错误。也许这可行。
qoheleth 2014年

如果没有外部测试集,我们将无法直接评估特定模型的性能。但是,如果是交叉验证的整个方法,则用于生成模型的方法的性能可以合理地替代模型本身的性能。换句话说,我同意你最后一句话的总结!
Dikran有袋动物2014年

5

我一直在对花费数百万美元购买的数据集进行广泛的交叉验证分析,并且没有可用的外部验证集。在这种情况下,我执行了广泛的嵌套交叉验证以确保有效性。我仅从各自的训练集中选择了功能并优化了参数。对于大型数据集,这在计算上是昂贵的,但这是我必须要做的以保持有效性。但是,随之而来的是复杂性……例如,在每个训练集中选择了不同的功能。

因此,我的回答是,在您无法访问外部数据集的情况下,这是一种合理的方法。当您拥有外部数据集时,您可以根据需要在主要数据集上进行大量查找,然后再对外部数据集进行一次测试。


@ user2643:您有什么参考可分享如何创建嵌套的简历吗?它是否与我在问题中链接到的pdf相同?另外.....此数据营销数据是偶然的吗?
B_Miner 2011年

@ user2643这种方法(正确)的问题在于,它仅产生一个用于准确性(分类)或精度(回归)的标准;正如您所说,您将无法说出“那些是最有趣的功能”,因为它们之间存在着折痕。我一直在研究遗传数据(600k变量),其中我们使用10倍CV进行嵌入特征选择,并采用置换方案(k = 1000,在5%的水平上比较满意)来评估结果的可靠性。这样,我们可以说:“我们的模型能否很好地概括”,仅此而已。
chl

2
如果特征因折迭而异,则意味着没有足够的信息来自信地确定有用的特征,因此,我认为作为交叉验证的优势(因为仅查看单个模型的结果可能会过度符合特征选择标准,因此会产生误导)。对于具有许多特征且观测值很少的问题,岭回归通常会提供更好的性能,因此除非确定特征是关键目标,否则最好不要进行任何特征选择。
Dikran有袋动物2011年

np

@ user2040:对不起,我的答复很晚。我创建了自己的嵌套CV方法的软件实现。因为我的研究与生物信息学有关,所以我计划很快将其描述提交给生物信息学期刊。但是它可以用于任何研究领域。如果您想尝试一下,请告诉我。yahoo dot com上的goldfish1434
user2643 2011年
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.