从 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的主要内容,如果未能解决你的问题,请参考以下文章

详解支持向量机-基于SVM的ROC曲线和AUC面积菜菜的sklearn课堂笔记

从数据框中手动创建 ROC 曲线

ROC曲线 大于阈值后如何计算HR

WEKA ROC CURVE - 色彩诠释

从 ROC 曲线获取阈值

scikit learn中roc_curve中的阈值