如何估计测试集上分类器的方差?

机器算法验证 交叉验证 模型选择
2022-04-18 11:31:27

我有一个二进制分类任务,我想比较两种不同的分类方法以及每种方法的超参数。我使用了 k 折交叉验证(k = 5)来获得我的性能指标的 k 个估计值(在给定的误报率范围内的平均未命中率),以给出近似的均值和方差。

这表明方法 A 平均优于 B,尽管方法 B 的最佳性能大致匹配方法 A 的最差性能。例如,方法 A 可能达到了 0.68 的未命中率(越低越好),标准差为0.02,而方法 B 达到 0.72,标准差也为 0.02。

对于我的任务,在测试集上报告单个性能数字是标准程序。当我根据交叉验证选择超参数时,方法 A 和方法 B 各自在测试集上实现的性能几乎相同。但是,我担心这仅仅是由于两种方法的差异,如果我可以对更多的训练和测试集进行采样,平均而言,方法 A 可能会更好。这些数字与我在交叉验证中看到的数字相差甚远,这表明训练和测试分布之间存在不匹配。

问题:有没有一种原则性的方法来使用测试分布来估计分类器的方差?

我想将交叉验证中的 k 个分类器应用到整个测试集(或通过自举对 k 个训练集重新采样后训练新的分类器)并查看结果的方差。但是,我担心这将特定于我拥有的测试集,而不是估计测试分布的属性。也许我应该将测试集分成 k 个随机分区?尽管这些都相对较小,但效率会低吗?

2个回答

有没有一种原则方法可以使用测试分布来估计分类器的方差?

是的,与您的直觉相反,通过交叉验证实际上很容易做到这一点。这个想法是迭代/重复交叉验证(或者如果您更喜欢用替换重新采样,则为袋外验证)允许您比较相同测试用例的略有不同“代理”模型的性能,从而分离由于模型不稳定性引起的方差(训练)来自由于有限数量的测试用例(测试)引起的方差。

参见例如Beleites, C. & Salzer, R.:Assessing and Improvement the stability ofchemometric models in small sample size situation, Anal Bioanal Chem, 390, 1261-1271 (2008)。DOI: 10.1007/s00216-007-1818-6

正如@RyanBressler 指出的那样,有一篇关于交叉验证的Bengio 论文从根本上低估了模型的方差。这种低估发生在假设重新采样是对新的独立样本的良好近似(显然不是)的假设上。如果您想比较某种类型的分类器对某种类型的数据的一般性能,这一点很重要,但在我们谈论从给定训练的分类器的性能的应用场景中却不是数据。还要注意,将这种“应用”测试方差分离为不稳定性和测试方差使用了一种非常不同的重采样视图:这里的代理模型被视为在整个给定训练数据上训练的模型的近似值或略微扰动的版本——这应该是一个更好的近似值。

方法 A 和方法 B 各自在测试集上实现的性能几乎相同。但是,我担心这仅仅是由于两种方法的差异,如果我可以对更多的训练和测试集进行采样,平均而言,方法 A 可能会更好。

这是很有可能的。我建议您检查 2 个方差来源(不稳定性,即训练和测试不确定性)中的哪一个是较大的方差来源,并专注于减少这种情况。

我认为ROC/AUC 分析的样本量计算讨论了有限测试样本量对 AUC 估计的影响。

但是,对于相同数据上的两个分类器的性能比较,我建议使用像 McNemar's 这样的配对测试:为了找出是否(或哪个)分类器更好,您可以专注于由错误预测的一个分类器进行的正确分类另一个。这些数字是二项式分布允许您计算方差的测试用例的一部分。

您需要某种引导程序或方法来生成独立的性能测量。

您不能查看 k 个交叉验证折叠或将测试集划分为 k 个分区,因为观察结果不是独立的。这可以并且将在方差估计中引入显着偏差。例如,参见Yoshua Bengio 的“K 折交叉验证方差的无偏估计”

在 CV 折叠上查看最佳和最差情况的性能甚至都不是真的有效,因为它们并不是真正独立的平局……有些折叠只会有更差或更好的性能。

您可以对性能进行袋外估计,基本上重复引导训练数据集并获得其余数据的性能。请参阅 Breiman 的这篇文章和 Tibshirani 引用的早期工作,以这种方式估计性能差异

如果这在计算上是令人望而却步的,因为您有大量数据,我想知道引导或以其他方式仅对保留集进行重新采样,但我想不出或找到该副手的参考。