比较 ROC 曲线的最快方法

机器算法验证 分类 交叉验证 模型选择 奥克
2022-04-03 06:46:12

我有一组用于训练模型的真阳性 (TP) 值。

我正在使用 5 折交叉验证来训练我的模型(即将我的真阳性分成 5 个,使用 4/5 进行训练和 1/5 进行测试)

我使用不同的 1/5 作为测试集重复此操作。对于每次运行,我都有大量混合的真阳性/真阴性,我使用我训练过的模型来尝试对其进行分类。然后我得到一个 ROC 曲线。这是为每次运行交叉验证完成的(即我最终得到 5 条 ROC 曲线)

然后我平均 AUC 并返回它。

我的问题:

我有两种分类方法:将它们称为方法 A 和方法 B。对于每种方法,我得到 5 条 ROC 曲线。如果每种方法都有多个 ROC,我如何确定哪种方法可以提供更好的 ROC?

我知道计算每种方法的 AUC 和平均值,然后比较平均 AUC 不是一个好方法。

注意:我有超过 1 个模型(大约 120 个)。为了简单起见,我只是用一个模型来解释。所以我有 120 个模型,每个模型都使用方法 A 和方法 B 对数据进行分类,并且对于每个方法 A 和 B,有 5 个来自交叉验证的 ROC。

编辑


更具体地说,我的问题是我有超过 100 组序列,并且对于每组我构建一个位置权重矩阵,然后我用它来对所有合并在一起的集合进行评分。我有几个评分方案,所以我想确定哪些给我最好的分类。为此,我使用交叉验证:将我的数据分成每组 5 个,用 4/5 的数据训练我的 pwm 并在 1/5 上进行测试。汇集 5 次运行的结果,并绘制 AUC。

2个回答

k-fold CV 比你做的要多。从本质上讲,使用这些疯狂的拆分而不是简单地制作一些随机子样本的想法是,您可以重建完整的决策并将其与原始决策进行比较,就像您对完整训练集的预测所做的那样。

因此,坚持完整的 k 折叠 CV 机制,您只需合并所有折叠的预测并为此计算 ROC - 这样您就可以为每个模型获得一个 AUROC。

但是,请注意,仅拥有两个数字并选择更大的数字并不是一种统计上有效的比较方式——如果没有这两个数字的分布,您无法使两个精度大致相同的假设无效。因此,如果您确定要进行任何模型选择,则需要获得这些价差(例如,通过引导 k-fold CV 以实际获得每个分类器的多个 AUROC 值)并进行一些多重比较测试,可能不是参数。

只是为了配合@mbq 的多重测试:如果你想比较 120 个模型中的每一个,那就是 7140 次比较!

您可能希望通过您对问题的专业知识预先减少模型的数量。或者包括(少数)模型,这些模型可以为您提供基线性能(恒定预测、随机预测),以测试它们在所有其他模型的范围内的位置。

此外,如果您想报告所选模型的最终性能,请确保您有一个独立的测试集。数据驱动优化意味着来自测试样本的信息会在您选择对这些(CV) 测试集表现良好的模型时输入您的最终模型。


更新:

  • 奥马尔,请认真对待弗兰克的暗示,并阅读其他更适合的绩效指标。

  • 如果您决定继续使用 AUROC,请确保在对您的应用敏感的一系列敏感性和特异性中计算它们。

  • 正如 mbq 所说,计算一个模型的 AUROC 值的分布,然后考虑是否有机会从具有 100 个独立测试用例的 120 个模型中找出一个好的模型。

  • 无论如何:如果您希望能够声称最终模型的性能,则需要使用完全独立的测试集对其进行测试。为参数优化或模型选择而测试的样本不再是独立的。你应该报告这个决赛的不确定性