如何用对角线以下的点修复ROC曲线?

时间:2012-12-09 04:00:12

标签: matlab machine-learning classification statistics roc

我正在建立接收器操作特性(ROC)曲线,以使用曲线下面积(AUC)来评估分类器(更多详细信息在帖子末尾)。不幸的是,曲线上的点通常低于对角线。例如,我最终得到的图形看起来像这里的图形(蓝色的ROC曲线,灰色的标识线):

Fixing the ROC

第三点(0.3,0.2)低于对角线。要计算AUC,我想修复这些顽抗点。

对于曲线上的点(fp,tp),标准方法是将其替换为点(1-fp,1-tp),这相当于交换分类器的预测。例如,在我们的例子中,我们麻烦的点A(0.3,0.2)变成了B点(0.7,0.8),我在上面链接的图像中用红色表示。

这就是my references处理这个问题。问题是,如果将新点添加到新的ROC中(并删除坏点),最终会得到如图所示的非单调ROC曲线(红色是新的ROC曲线,蓝色虚线是旧的):

New ROC

在这里,我被困住了。如何修复此ROC曲线?

我是否需要重新运行我的分类器,并以某种方式转换数据或类以考虑这种奇怪的行为?我查看了relevant paper,但如果我没有弄错的话,它似乎正在解决一个与此不同的问题。

根据一些细节:我仍然拥有所有原始阈值,fp值和tp值(以及每个数据点的原始分类器的输出,输出只是从0到1的标量,即班级成员的概率估计)。我在matlab中以perfcurve函数开始这样做。


2 个答案:

答案 0 :(得分:4)

注意基于一些非常有用的电子邮件来自上面引用文章的人和上面的讨论,正确答案似乎是:不要试图“修复”ROC曲线中的单个点,除非你构建一个全新的分类器,然后一定要省略一些测试数据,看看这是否合理。

在身份线下方获得积分就是这种情况。这就像获得一个单独的分类器,即使最佳理论最小值为50%,也能获得45%的正确分类。这只是真实数据集变化的一部分,除非它基于偶然性显着低于预期,否则你不应该过分担心。例如,如果你的分类器得到20%正确,那么显然有些不对劲你可以查看具体原因并修复你的分类器。

答案 1 :(得分:3)

是的,交换点(1-fp,1-tp)理论上是有效的,但增加样本量也是一个安全的选择。

您的系统似乎具有非单调响应特性,因此请注意不要过度弯曲ROC规则,否则会影响AUC的稳健性。

也就是说,您可以尝试使用Pareto Frontier Curve (Pareto Front)。如果符合“修复凹陷”的要求,那么您基本上会对点进行排序,以使ROC曲线变得单调。