如何使用 ROCR 提取平均 ROC 曲线预测?

Posted

技术标签:

【中文标题】如何使用 ROCR 提取平均 ROC 曲线预测?【英文标题】:How to extract average ROC curve predictions using ROCR? 【发布时间】:2016-08-18 05:14:51 【问题描述】:

R 中的 ROCR 库提供绘制平均 ROC 曲线的能力(来自 ROCR reference manual):

library(ROCR)
library(ROCR)
data(ROCR.xval)
# plot ROC curves for several cross-validation runs (dotted
# in grey), overlaid by the vertical average curve and boxplots
# showing the vertical spread around the average.
data(ROCR.xval)
pred <- prediction(ROCR.xval$predictions, ROCR.xval$labels)
perf <- performance(pred,"tpr","fpr")
plot(perf,col="grey82",lty=3)
plot(perf,lwd=3,avg="vertical",spread.estimate="boxplot",add=TRUE)

可爱。不幸的是,似乎无法将平均 ROC 曲线本身作为对象/数据框/等获得。用于进一步的统计测试(例如,使用pROC)。我确实做了一些研究(尽管可能是事后),我发现了这篇文章:

Global variables in R

我查看了 ROCR 的代码,发现以下几行用于将结果传递给绘图:

performance_plots.R,(从第 451 行开始)

## compute average curve
 perf.avg <- perf.sampled
 perf.avg@x.values <- list( rowMeans( data.frame( perf.avg@x.values)))
 perf.avg@y.values <- list(rowMeans( data.frame( perf.avg@y.values)))
 perf.avg@alpha.values <- list( alpha.values )

所以,使用trace 函数我在此处查找(General suggestions for debugging in R):

trace(.performance.plot.horizontal.avg, edit=TRUE)

我在performance_plots.R 上面列出的行之后添加了以下行:

perf.rocr.avg <<- perf.avg # note the double `<<`

一个可怕的 hack,但它可以正常工作,因为我可以毫无问题地绘制 perf.rocr.avg。不幸的是,当使用 pROC 时,我无法比较我的平均 ROC 曲线,因为它需要一个 pROC roc 对象。这很好,但问题是 pROC roc 对象需要原始预测和参考数据来创建。据我所知,ROCR 正在平均 ROC 曲线本身而不是预测,所以我似乎无法从 ROCR 中得到我想要的。

有没有办法对ROCR创建的平均 ROC 曲线的预测进行逆向工程?

【问题讨论】:

您是否查看过 predict 命令是否适用于 ROC? @Dave2e - 我有,但我没有取得太大进展。我在perf.avg.rocr &lt;&lt;- perf.avg 上方的最后一行之后分配了一个变量,这给了我一个 ROCR performance 对象,以及所需的平均 ROC 图。不幸的是,我现在意识到我不能使用roc.test,因为它不是prediction 对象。欢迎任何其他建议... 你有没有看过这个答案:***.com/questions/11467855/… 或这个hopstat.wordpress.com/2014/12/19/… 我没有使用 ROCR 库,所以我无法提供更多建议 @Dave2e - 你一定很喜欢这个关于 SO 的问题已经被投票了 16 次并且完全是 RTFM,而我问的是一些程序化的东西,这让我老实说难住了,我被否决了。不管怎样,谢谢!我(现在)非常精通ROCR 的用法。只是它没有做我需要它做的事情。更糟糕的是,pROC 只接受一个roc 对象进行统计测试,它本身需要原始预测和参考数据。我会坚持到底。​​span> @Prophet60091 你有没有找到解决办法?我希望能够为各个 ROC 曲线提取数据框,因此如果您能指导我,我将不胜感激。 【参考方案1】:

我遇到了和你一样的问题。在我看来,ROCR 包生成的平均 ROC 只是分配了数值,而其他统计属性(例如置信区间)则缺乏。这意味着平均 ROC 的统计数据可能没有意义,这就是为什么不能通过 PROc 包中的 (tpr, fpr) list 生成 roc 对象的原因。但是,我找到了一篇论文来解决这个问题,即平均 ROC 之间的比较。标题是“相关接收器操作特征曲线下的平均面积:基于广义双样本 Wilcoxon 统计的非参数方法”。我希望这会有所帮助。

【讨论】:

其实我实现了那篇论文中提出的方法,结果看起来是合理的。如果您的目标是在平均 ROC 之间进行统计检验,这是一个不错的选择。

以上是关于如何使用 ROCR 提取平均 ROC 曲线预测?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 knn 模型绘制 ROC 曲线

如何用R语言画ROC曲线图

如何使用 r 中的 ROCR 包绘制 ROC 曲线,*只有分类列联表*

使用 rocr 包的决策树 ROC 曲线

ROCR 包中截止值大于 1 的彩色 ROC 曲线

一个绘图中的多条 ROC 曲线 ROCR