使用 PRROC 包的 ROC 曲线中的数据值

data values in ROC curve using PRROC package

我正在尝试绘制用于确定背景数据集阳性发生率的标识符的 ROC 曲线。标识符是概率分数的列表,两组之间有一些重叠。

FG          BG
0.02        0.10
0.03        0.25 
0.02        0.12
0.04        0.16
0.05        0.45
0.12        0.31
0.13        0.20

(其中 FG = 阳性,BG = 阴性。)

我正在使用 R 中的 PRROC 绘制 ROC 曲线,以评估标识符将数据分类到正确组中的程度。尽管在正负数据集之间产生的分类器值之间存在明显区别,但我当前在 R 中的 ROC 图显示了较低的 AUC 值。我对正数据的概率得分低于背景,所以如果我切换分类并将背景作为前景点,我会得到一个高得分的 AUC 曲线,我不是 100% 清楚为什么会这样,哪个情节是最好用的还是在分析我的数据之前我是否错过了额外的步骤。

roc <- roc.curve(scores.class0 = FG, scores.class1 = BG, curve = T)

ROC curve

Area under curve:
0.07143

roc2 <- roc.curve(scores.class0 = BG, scores.class1 = FG, curve = T)

ROC curve

Area under curve:
0.92857

正如您确实注意到的那样,大多数 ROC 分析工具都假设您的正面 class 分数高于负面 class 的分数。更正式地说,如果 X > T,则实例 class 化为 "positive",其中 T 是决策阈值,否则为负。

没有根本原因。做出诸如 X < T 之类的决定是完全有效的,但是大多数 ROC 软件没有该选项。

使用你的第一个选项导致 AUC = 0.07143 意味着你的 classifier 比随机表现更差。这是不正确的。

如您所见,交换 class 标签会产生正确的曲线值。 这是可能的,因为 ROC 曲线对 class 分布不敏感 - 并且 classes 可以毫无问题地恢复。 但是,我个人不会推荐该选项。我可以看到两种可能会产生误导的情况:

  • 给看代码的其他人,或者几个月后的你自己;认为 class 是错误的 "fixing" 他们
  • 或者如果您想将相同的代码应用于对 class 分布敏感且无法交换 classes 的 PR 曲线。

另一种更可取的方法是反转此分析的分数,以便正面 class 实际上具有更高的分数:

roc <- roc.curve(scores.class0 = -FG, scores.class1 = -BG, curve = T)