交叉验证分类准确性的显着性测试:改组与二项式测试

机器算法验证 假设检验 分类 交叉验证 蒙特卡洛
2022-03-31 09:51:01

我有一个包含 2 个类的数据集和某种构建二进制分类器的方法。我想测量它的性能并测试它是否显着高于机会水平。我通过重复的交叉验证来衡量它的性能(见下文)。我的问题是:如何测试显着性?

这是我的交叉验证程序。我使用 100 倍分层蒙特卡洛交叉验证(虽然我不确定这是正确的术语;有些人似乎称之为boostrapout-of-bootstrapleave-group-out交叉验证):on我随机选择的每一折K=4测试用例,每个类 2 个,在剩余数据上训练分类器,并对这 4 个用例进行分类。假设我得到ai正确的分类。这是重复的N=100次,所以我得到了正确分类的总数A=Σai. 我报告平均分类准确率A/400以及单个精度的标准差ai/4.

  • 注1:由于我认为在这里不是很重要的原因,我不能增加K并且不能使用通常的 k 折交叉验证,所以这种蒙特卡洛方法对我来说是唯一可能的方法。我的估计器的方差很大,但我无事可做。
  • 注 2:@FrankHarrel 会说分类准确性是“不连续的不正确评分规则”。我知道,但在这种特殊情况下,我可以接受。我没有在这里优化任何模型,我的分类器已经给出。

现在,我天真地认为随机分类器会以 50% 的概率预测每个案例,因此在机会级别分类器的零假设下正确分类的数量将是Binom(400,0.5)N(200,100),所以我可以简单地测试我的A位于上部α此二项式/正态分布的百分比(例如 1%)。

然而,我决定做一个洗牌测试。我打乱我的标签,然后使用上述整个过程进行 100 次折叠以获得平均打乱精度Bj, 并重复这个洗牌M=100次。目的是在零假设下对精度进行抽样。在我获得 100 个值之后Bj我看他们的分布。平均值非常接近 200,这很好。但是,方差远大于100,大约是 1500。我不明白这怎么可能。

仔细观察后,我注意到在每个 shuffle 中,超过 100 倍的正确分类的方差约为 1,正如预期的那样:40.5(10.5)=1. 但是在一些 shuffle 中,正确分类的平均数量远低于 2,而在其他一些 shuffle 中,它远远超过 2。这种额外的变化导致了Bj这么高。相反,如果在每个 shuffle 中我使用真正的随机分类器,而不是根据我的方法建立在训练集上的分类器,那么我得到Bj很好地跟随N(200,100).

这怎么可能?我应该使用二项分布还是经验分布进行统计检验?差别非常大。如果我应该使用经验的,有没有办法以某种方式近似它而不实际执行洗牌(这需要很长时间)?

更新

实际上,我想到了第三种测试显着性的方法:我可以查看我的置信区间A看看它是否排除了200。不需要做任何二项式测试,不需要任何洗牌。但是,我对应该建立置信区间的方差感到困惑:它是ai或平均值的标准误ai? 差异当然是巨大的。如果样本总数很大,那么可以假设我的个人蒙特卡罗折叠是独立的,我想我可以取平均值的标准误差ai. 但是如果样本总数不是那么大,它们就不再是独立的了。另一方面,标准偏差太大而无法用于测试。似乎我需要将方差除以ai通过有效折叠数的平方根(小于 100),但我不知道如何估计它。

2个回答

Radmacher 及其同事 (J. Comput. Biol. 9:505-511) 描述了一种计算错误率重要性的过程。我们排列类标签(几千次)并重复整个交叉验证过程,以评估产生与观察到的一样小的交叉验证错误率的概率。与当前问题相关的一个概念是交叉验证折叠的摘要不是独立的,这对获得置信区间和 p 值提出了挑战。姜及其同事对此进行了讨论(Stat Appl Genet Mol Biol. 2008;7(1))。另请注意,“显着”错误率度量是预测规则的最低要求,并没有过多地说明其有用性。但是,考虑到经常使用小样本,预测规则存在很多问题,

这并不是我的问题的真正答案,但我想提供一个明确且非常简单的模拟来展示我描述的症状,并且我不想把问题弄得太混乱。

让我们考虑最简单的情况。我将抽取 400 个一维样本:200 个等于 -1,200 个等于 +1。位于-1的所有样本都属于A类,位于+1的所有样本都属于B类。分类器将测量每个类的均值(质心),并将每个测试样本分配给质心较近的类。没有什么比这更简单了。这是一个插图(“A”表示 A 类 200 分,“B”表示 B 类 200 分):

---------A------------B------------>

我可以做与上面描述的完全相同的蒙特卡洛交叉验证:我随机选择K=4测试用例,每个类 2 个,在剩余的训练集上训练分类器,并对这四个进行分类;重复 100 次。显然正确分类的数量是400,即100%的准确率。特别是对于@cbeleites,我还可以运行通常的 100 倍(分层)CV,准确度也是 100%。请注意,迭代此 CV 没有意义,因为什么都不会改变。

现在我们进行洗牌。我随机打乱标签,重复完全相同的过程并获得正确分类的数量Bj. 然后再次洗牌,重复 100 次。结果:平均值Bj大约是 200(非常接近,就像不同运行的 198-202),所以机会水平。但方差Bj在 400-900 的范围内(在不同的运行中)。这对于 Monte Carlo CV 和标准 100 倍 CV 都是如此。方差总是比预期的二项式方差大得多,它应该等于 400*0.5*(1-0.5) = 100。

现在要么我忽略了一个完全愚蠢的错误(这是绝对可能的!),要么我们对来自Confidence interval for cross-validated classification accuracy 的所有推理有一个大问题,因为二项式间隔没有任何意义。例如,如果我通过将 80 个点从 A 类重新标记到 B 类(反之亦然)破坏了我理想的类分离,那么我的实际解码样本数变为 240。CV 迭代的稳定性是完美的。二项式置信区间binofit(240,400)为 [0.55, 0.65],不包括 0.5,因此我们可以得出结论,解码是显着的。但是随机正确解码器的方差仍然平均在 500-600 左右,所以标准差在 22 左右,所以随机解码的零假设的 95% 间隔在 200 左右±45,其中包括 240,表示不显着

据我所知,这个问题与不同的 CV 折叠不是独立的无关,它与有限样本量有关是完全不同的问题。样本量越大,方差越小Bj(现在我回到蒙特卡洛交叉验证,即使样本量更大,我仍然可以对 400 个案例进行分类)。但我必须使用超过 10000 的样本量才能获得接近 100 的方差。这样的样本量远远超出现实。

更新:

在上面的评论中@julieth 引用了江等人的一篇论文。使用重采样计算微阵列分类中预测误差的置信区间“......测试[我认为他们的意思是“训练”——变形虫]设置在哪个预测上i-第一个案例有n2与训练集相同的样​​本j-th 是基于的,因此,预测错误的数量不是二项式”。换句话说,他们声称非二项式的原因是训练集不是互斥的。事实证明,Nadeau 和 Bengio 有一个庞大的 49-关于它的一页长的论文称为泛化错误的推理,他们在其中非常详细地讨论了这个问题。

一开始我不相信,所以我用上面的模拟来检查这个说法。如果我将样本总数增加到 4000 个,我可以使用 100 倍的 Monte Carlo CV 过程(每次分类 4 个测试用例)得到 400 个预测。在混洗数据上(我将混洗次数增加到 1000),正确分类的平均数为 199,方差为 346:尽管样本量现在已达到 4000,但仍然远远超过 100。

但现在我也可以这样做:将我的 4000 个样本分成 40 个的 100 个分层部分,并在每个部分中使用 36 个样本来预测 4。我也会得到 400 个预测,但是这次所有的训练集都是互斥的。结果(同样经过 1000 次洗牌):均值 199,方差 98。

哇!Nadeau、Bengio 和@julieth 似乎是对的。而二项式假设似乎是完全错误的。我想知道有多少论文使用二项式置信区间和测试......