在R中使用ROCR包计算准确率

3
我将使用ROCR包在R中计算准确率, 但结果与我的期望不同:
假设我有一个模型预测(p),以及以下标签(l):
p <- c(0.61, 0.36, 0.43, 0.14, 0.38, 0.24, 0.97, 0.89, 0.78, 0.86)
l <- c(1,     1,    1,    0,    0,     1,    1,    1,    0,     1)

我正在使用以下命令计算这个预测的准确性:

library(ROCR)
pred <- prediction(p, l)
perf <- performance(pred, "acc")
max(perf@y.values[[1]])

但结果是0.8,根据正确率公式(TP+TN)/(TN+TP+FN+FP),应该是0.6。我不知道为什么?
1个回答

4
当你使用max(perf@y.values[[1]])时,它计算的是预测正例的任何可能截断点的最大准确度。
在你的情况下,最佳阈值是p=0.2,在这个阈值下,你会犯2个错误(对于预测概率为0.38和0.78的观察结果),从而得到最大准确度为0.8。
你可以使用perf@x.values[[1]]访问你的perf对象的截断点。

谢谢您的回答。如何获得“0.5”截止值的准确性?是max(perf@y.values[[0.5]])吗?此外,您知道为什么我们需要使用max()来获取这些值吗? - Zhubarb
@Zhubarb 使用ROCR时,我会使用 perf@y.values[[1]][max(which(perf@x.values[[1]] >= 0.5))] - josliber
非常好,所以在这个具体的例子中,perf@x.values=Inf 0.97 0.89 0.86 0.78 0.61 0.43 0.38 0.36 0.24 0.14perf@y.values=0.3 0.4 0.5 0.6 0.5 0.6 0.7 0.6 0.7 0.8 0.7。因此,你的代码返回了cut_off=0.61(这是大于0.5的最小截止值)的acc,对吗? - Zhubarb
1
@Zhubarb 这是在范围0.43-0.61内所有截断点的准确率。 - josliber
我明白了,这样更有意义。我原以为截止时间有点随意。非常感谢! - Zhubarb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接