我有一个包含 2 个类的数据集和某种构建二进制分类器的方法。我想测量它的性能并测试它是否显着高于机会水平。我通过重复的交叉验证来衡量它的性能(见下文)。我的问题是:如何测试显着性?
这是我的交叉验证程序。我使用 100 倍分层蒙特卡洛交叉验证(虽然我不确定这是正确的术语;有些人似乎称之为boostrap或out-of-bootstrap或leave-group-out交叉验证):on我随机选择的每一折测试用例,每个类 2 个,在剩余数据上训练分类器,并对这 4 个用例进行分类。假设我得到正确的分类。这是重复的次,所以我得到了正确分类的总数. 我报告平均分类准确率以及单个精度的标准差.
- 注1:由于我认为在这里不是很重要的原因,我不能增加并且不能使用通常的 k 折交叉验证,所以这种蒙特卡洛方法对我来说是唯一可能的方法。我的估计器的方差很大,但我无事可做。
- 注 2:@FrankHarrel 会说分类准确性是“不连续的不正确评分规则”。我知道,但在这种特殊情况下,我可以接受。我没有在这里优化任何模型,我的分类器已经给出。
现在,我天真地认为随机分类器会以 50% 的概率预测每个案例,因此在机会级别分类器的零假设下正确分类的数量将是,所以我可以简单地测试我的位于上部此二项式/正态分布的百分比(例如 1%)。
然而,我决定做一个洗牌测试。我打乱我的标签,然后使用上述整个过程进行 100 次折叠以获得平均打乱精度, 并重复这个洗牌次。目的是在零假设下对精度进行抽样。在我获得 100 个值之后我看他们的分布。平均值非常接近 200,这很好。但是,方差远大于100,大约是 1500。我不明白这怎么可能。
仔细观察后,我注意到在每个 shuffle 中,超过 100 倍的正确分类的方差约为 1,正如预期的那样:. 但是在一些 shuffle 中,正确分类的平均数量远低于 2,而在其他一些 shuffle 中,它远远超过 2。这种额外的变化导致了这么高。相反,如果在每个 shuffle 中我使用真正的随机分类器,而不是根据我的方法建立在训练集上的分类器,那么我得到很好地跟随.
这怎么可能?我应该使用二项分布还是经验分布进行统计检验?差别非常大。如果我应该使用经验的,有没有办法以某种方式近似它而不实际执行洗牌(这需要很长时间)?
更新
实际上,我想到了第三种测试显着性的方法:我可以查看我的置信区间看看它是否排除了200。不需要做任何二项式测试,不需要任何洗牌。但是,我对应该建立置信区间的方差感到困惑:它是或平均值的标准误? 差异当然是巨大的。如果样本总数很大,那么可以假设我的个人蒙特卡罗折叠是独立的,我想我可以取平均值的标准误差. 但是如果样本总数不是那么大,它们就不再是独立的了。另一方面,标准偏差太大而无法用于测试。似乎我需要将方差除以通过有效折叠数的平方根(小于 100),但我不知道如何估计它。