在 R 中计算 AUPR

机器算法验证 r 精确召回
2022-01-25 15:53:22

在 ROC 下很容易找到一个包计算面积,但是有没有一个包可以计算精度-召回曲线下的面积?

4个回答

截至 2016 年 7 月,PRROC包非常适合计算 ROC AUC 和 PR AUC。

假设您已经有一个probs使用模型计算的概率向量(称为 ),并且真正的类标签在您的数据框中,因为df$label(0 和 1)此代码应该可以工作:

install.packages("PRROC")

require(PRROC)
fg <- probs[df$label == 1]
bg <- probs[df$label == 0]

# ROC Curve    
roc <- roc.curve(scores.class0 = fg, scores.class1 = bg, curve = T)
plot(roc)

# PR Curve
pr <- pr.curve(scores.class0 = fg, scores.class1 = bg, curve = T)
plot(pr)

PS:唯一令人不安的是您使用scores.class0 = fgwhenfg为标签 1 而不是 0 计算。

以下是示例 ROC 和 PR 曲线及其下方的面积:

具有 AUC 的 ROC 曲线

带 AUC 的 PR 曲线

右边的条是获得曲线上一个点的阈值概率。

请注意,对于随机分类器,ROC AUC 将接近 0.5,而与类不平衡无关。但是,PR AUC 很棘手(请参阅精确召回曲线中的“基线”是什么)。

稍微搜索一下就会返回一个 bioc 包qpgraph ( qpPrecisionRecall) 和一个 cran包minet ( auc.pr)。不过,我对他们没有经验。两者都被设计用于处理生物网络。

一旦您从 中获得精确召回曲线qpPrecisionRecall,例如:

pr <- qpPrecisionRecall(measurements, goldstandard)

您可以通过以下方式计算其 AUC:

f <- approxfun(pr[, 1:2])
auc <- integrate(f, 0, 1)$value

的帮助页面qpPrecisionRecall为您提供有关其参数中期望的数据结构的详细信息。

AUPRC()是包中的一个函数,在数据很大的时候比包中的函数PerfMeas要好很多当您拥有包含数百万个条目的向量时,这是一场噩梦,并且需要永远完成。相比之下需要几秒钟。用 R编写,用 C 编写。pr.curve()PRROCpr.curve()PerfMeasPRROCPerfMeas