当样本量较小时,交叉验证仍然有效吗?

机器算法验证 分类 交叉验证
2022-03-02 09:26:42

我对交叉验证有一个非常基本的困惑。

假设我正在构建一个线性二元分类器,并且我想使用交叉验证来估计分类精度。现在想象一下,我的样本量很小,但特征的数量很大。即使特征和类别是随机生成的(即“实际”分类准确率应该为 50%),也可能会发生其中一个特征完美地预测二元类别的情况。如果很小并且,这种情况并非不可能。NkNk>>N在这种情况下,任何数量的交叉验证折叠都将获得 100% 的分类准确率,这显然不代表我的分类器的实际能力,从某种意义上说,正确分类新样本的概率仍然只有 50%。[更新:这是错误的。请参阅下面的答案,以了解为什么它是错误的。]

有没有常见的方法来处理这种情况?

例如,如果我想评估我的两个类之间的统计差异,我可以运行 MANOVA,如果两组减少到计算 Hotelling 的 T。即使某些特征产生显着的单变量差异(“误报”),我应该得到总体上不显着的多变量差异。但是,我在交叉验证过程中看不到任何可以解释这种误报(“错误判别”?)的东西。我错过了什么?

我自己能想到的一件事是对特征进行交叉验证,例如在每个交叉验证折叠上选择随机的特征子集(除了随机选择测试集之外)。但我不认为经常(曾经?)使用这种方法。

更新: “统计学习的要素”第 7.10.3 节题为“交叉验证真的有效吗?” 提出完全相同的问题并声称永远不会出现这种情况(交叉验证准确率将是 50%,而不是 100%)。到目前为止,我不相信,我会自己运行一些模拟。[更新:他们是对的;见下文。]

2个回答

我认为您的想法并没有太多混乱,您将手指放在分类器验证的一个非常重要的问题上:不仅分类器训练而且分类器验证都有一定的样本量需求。


好吧,看到编辑:毕竟可能会有一些混乱......“元素”告诉你的是,在实践中,这种观察最可能的原因是训练和测试之间存在泄漏,例如因为“测试”数据用于优化模型(这是一项训练任务)

元素部分关注由此引起的乐观偏见。但也存在方差不确定性,即使正确进行所有拆分,您也可以观察到极端结果。


IIRC 元素中没有详细讨论方差问题(除了元素在第 7.10.1 节中讨论的内容之外,还有更多内容),所以我先从这里开始:

是的,您可能而且确实会意外地拥有一个预测器,该预测器可以完美地预测这个特定的小数据集(训练和测试集)。你甚至可能只是得到一个意外地导致看似完美的结果的拆分,而重新替换错误将 > 0。

这也可能发生在正确的(因此是无偏的)交叉验证中,因为结果也会受到方差的影响。

恕我直言,人们没有考虑这种方差不确定性一个问题(相比之下,偏差经常被详细讨论;我很难看到任何论文讨论他们的结果的方差不确定性,尽管在我的领域通常<100,在一项研究中经常甚至 < 20 名患者,这是不确定性的主要来源)。进行一些基本的健全性检查来避免大多数这些问题并不难。

这里有两点:

  • 训练用例太少(训练样本./.模型复杂度和变量数量),模型变得不稳定。他们的预测能力无处不在。平均而言,它不是那么好,但它可能会意外地变得非常好。
    您可以折交叉验证的结果以非常简单的方式测量模型不稳定性对预测的影响:在每次迭代中,每个案例都被预测一次。由于案例保持不变,这些预测的任何变化都是由代理模型的不稳定性引起的,即模型对交换几个训练案例的反应。k
    参见例如 Beleites, C. & Salzer, R.:Assessing and Improvement the stability of Chemistry Models in small sample size situation, Anal Bioanal Chem, 390, 1261-1271 (2008)。
    DOI: 10.1007/s00216-007-1818-6

    恕我直言,检查代理模型是否稳定是一种健全性检查,应始终在小样本情况下进行。特别是因为它的成本几乎为零:它只需要对交叉验证结果进行稍微不同的聚合(并且折交叉验证,除非证明模型是稳定的)。k

  • 就像你说的:如果测试用例太少,你观察到的成功和失败可能到处都是。如果您计算错误率或命中率等比例,它们也会无处不在。这被称为这些比例受到高方差的影响。
    例如,如果模型确实有 50% 的命中率,则在 3 个预测中观察到 3 个正确的概率是(二项分布)。但是,可以计算比例的置信区间,并且这些置信区间会考虑到测试了多少个案例。有很多关于如何计算它们的文献,以及在什么情况下哪些近似值有效或根本无效。对于我的示例中 3 个测试用例的极小样本量:0.53=12.5%

    binom.confint (x=3, n=3, prior.shape1=1, prior.shape2=1)
    #           method x n mean     lower     upper
    # 1  agresti-coull 3 3  1.0 0.3825284 1.0559745  
    # 2     asymptotic 3 3  1.0 1.0000000 1.0000000  
    # 3          bayes 3 3  0.8 0.4728708 1.0000000  
    # 4        cloglog 3 3  1.0 0.2924018 1.0000000
    # 5          exact 3 3  1.0 0.2924018 1.0000000
    # 6          logit 3 3  1.0 0.2924018 1.0000000
    # 7         probit 3 3  1.0 0.2924018 1.0000000
    # 8        profile 3 3  1.0 0.4043869 1.0000000 # generates warnings
    # 9            lrt 3 3  1.0 0.5271642 1.0000000
    # 10     prop.test 3 3  1.0 0.3099881 0.9682443
    # 11        wilson 3 3  1.0 0.4385030 1.0000000
    

    你会注意到有很多变化,特别是在下限。仅这一点就表明测试样本量非常小,以至于可以从测试结果中得出任何结论。
    然而,在实践中,置信区间是否跨越从“猜测”到“完美”或从“比猜测更糟糕”到“完美”的范围几乎无关紧要

  • 结论 1:事先考虑性能结果需要多精确才能进行有用的解释。由此,您可以粗略地计算出所需的(测试)样本量。

  • 结论 2:计算性能估计的置信区间

  • 对于基于正确/错误预测的模型比较,甚至不要考虑为每个分类器使用少于数百个测试用例。
    查看 McNemar 的测试(对于配对情况,即您可以使用两个分类器测试相同的情况)。如果您无法进行配对比较,请查找“比例比较”,您将需要更多案例,请参阅下面链接的论文以获取示例。

  • 您可能对我们关于这些问题的论文感兴趣:
    Beleites, C. et al. : 分类模型的样本量规划。, Anal Chim Acta, 760, 25-33 (2013)。DOI:10.1016/j.aca.2012.11.007arXiv:1211.1323


关于随机选择特征的第二次更新:为随机森林进行的 bagging 经常使用这种策略。在这种情况下,我认为这很少见,但这是一种有效的可能性。

我弄清楚发生了什么:Hastie 等人。(当然)是对的,而我的直觉是错误的。这是我的逻辑缺陷的演示。

假设我们有 10 个样本,前五个是第 1 类,后五个是第 2 类。让我们生成 200 个随机特征。他们中的一些人可能完美地预测了班级,我在下面的情节中将他们加粗:

交叉验证有效性

如果我们使用这三个特征中的每一个在类之间进行 t 检验,我们会得到三个显着的 p 值:0.0047、0.011 和 0.0039。当然,这些都是由于采摘樱桃而导致的误报。如果我们使用所有 200 个特征进行 Hotelling 测试,我们会得到一个不显着的 p=0.61,正如预期的那样。

现在让我们尝试交叉验证。我进行 5 折分层交叉验证,从每个类别中取出 1 个样本进行分类。分类器将是所有 200 个特征的 LDA。我用不同的随机特征重复这个过程 100 次,我得到的正确解码类的平均数是 4.9,即机会水平!

好吧,具有 10 个类和 200 个特征的 LDA 严重过度拟合。让我们在每个交叉验证折叠的训练测试中只选择具有完美类别分离的特征。由此产生的平均准确度为 5.1,仍然是机会水平。为什么?因为事实证明,我在每个折叠上使用的特征数量大于整个数据集上“完美”特征的数量。有些特征在训练集上看起来很完美,但在测试集上的预测能力为零。他们搞砸了分类。

这正是我之前没有意识到的一点。

最后,只能在整个数据集上使用具有完美类别分离的特征。那么平均准确率是 9.3,但这是作弊!当然,在进行交叉验证时,我们不允许使用有关整个数据集的任何知识。