模型选择后的交叉验证(错误泛化)

机器算法验证 机器学习 模型选择 数据挖掘 交叉验证
2022-01-28 17:20:24

注:案例为 n>>p

我正在阅读 Elements of Statistical Learning 并且有很多关于进行交叉验证的“正确”方法的提及(例如第 60 页,第 245 页)。具体来说,我的问题是如何在进行模型搜索时使用 k-fold CV 或 bootstrapping 评估最终模型(没有单独的测试集)?似乎在大多数情况下(没有嵌入特征选择的 ML 算法)会有

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

我的问题:

  1. 我已经看到特征选择步骤可以在整个训练集上完成特征选择并搁置一旁的情况下完成。然后,使用 k-fold CV,在每个折叠中使用特征选择算法(每次可能选择不同的特征)并平均误差。然后,您将使用使用所有数据(被搁置)选择的特征来训练最终模式,但使用来自交叉验证的误差作为对模型未来性能的估计。它是否正确?
  2. 当您使用交叉验证来选择模型参数时,那么之后如何估计模型性能?是否与上面的 #1 相同,或者您应该使用第 54 页 ( pdf )上显示的嵌套简历或其他内容?
  3. 当您同时执行这两个步骤(功能和参数设置)时......那么您会做什么?复杂的嵌套循环?
  4. 如果您有一个单独的保留样本,问题是否消失了,您可以使用交叉验证来选择特征和参数(不用担心,因为您的性能估计将来自保留集)?
2个回答

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

正如Cawley 和 Talbot所证明的那样,偏离该配方可能引入的乐观偏差可能非常大,其中由明显良性的偏离引入的偏差大于竞争分类器之间的性能差异。更糟糕的偏向协议最有利于不良模型,因为它们对超参数的调整更敏感,因此更容易过度拟合模型选择标准!

具体问题的答案:

步骤 1 中的过程是有效的,因为在每个折叠中单独执行特征选择,因此您要交叉验证的是用于拟合最终模型的整个过程。交叉验证估计会有轻微的悲观偏差,因为每个折叠的数据集略小于用于最终模型的整个数据集。

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

对于 3,基本上,是的,您需要进行嵌套嵌套交叉验证。本质上,您需要在最外层交叉验证(用于性能估计)的每一折中重复打算执行的所有操作以适应最终模型。

对于 4 - 是的,如果您有一个单独的保留集,那么这将给出一个无偏的性能估计,而无需额外的交叉验证。

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

所以我的回答是,如果您无法访问外部数据集,这是一种合理的方法。当您确实有一个外部数据集时,您几乎可以随心所欲地在主数据集上进城,然后在外部数据集上测试一次。