从 10 个不同的阈值创建 ROC
Posted
技术标签:
【中文标题】从 10 个不同的阈值创建 ROC【英文标题】:create ROC from 10 different thresholds 【发布时间】:2013-05-14 16:19:45 【问题描述】:我有来自 svmlight 的输出,它有 x=predictions (0.1,-0.6,1.2,-0.7...),y=actual class +1,-1。我想为 10 个特定的不同阈值创建一条 ROC 曲线(让 t 成为包含 10 个不同阈值的向量)。我检查了 ROCR 包,但没有看到任何提供阈值向量的选项。我需要为每个阈值和绘图计算 TPR 和 FPR。有没有其他方法可以做到这一点?我是 R 编程新手。
【问题讨论】:
我也不知道如何在 pred 中设置阈值。我尝试了一种天真的方法,毫不奇怪,它不起作用: pred 【参考方案1】:ROCR 通过绘制许多不同阈值的 TPR 和 FPR 来创建 ROC 曲线。这可以通过一组预测和标签来完成,因为如果一个观察被分类为一个阈值的正面,它也将被分类为较低阈值的正面。我发现this paper 有助于更详细地解释 ROC 曲线。
您可以在 ROCR 中创建如下图,其中 x 是预测向量,y 是类标签向量:
pred <- prediction(x,y)
perf <- performance(pred,"tpr","fpr")
plot(perf)
如果要访问与所有阈值关联的 TPR 和 FPR,可以检查性能对象“perf”:
str(perf)
以下答案更详细地说明了如何获取阈值:
https://***.com/a/16347508/786220
【讨论】:
【参考方案2】:您可以使用pROC
包做到这一点。首先创建 ROC 曲线(针对所有阈值):
myROC <- roc(y, x) # with the x and y you defined in your question
然后您查询此曲线以查找您存储在 t
中的 10 个(或任意数量)阈值:
coords(myROC, x = t, input="threshold", ret = c("threshold", "se", "1-sp"))
敏感性是您的 TPR,而 1-Specificity 是您的 FPR。
免责声明:我是 pROC 的作者。
【讨论】:
我认为特异性是 1 - FPR?以上是关于从 10 个不同的阈值创建 ROC的主要内容,如果未能解决你的问题,请参考以下文章