【问题标题】:Multiple ROC curves in one plot ROCR一个绘图中的多条 ROC 曲线 ROCR
【发布时间】:2012-12-14 15:35:41
【问题描述】:

是否可以使用 ROCR 包在同一图中绘制不同分类器的 roc 曲线?我试过了:

>plot(perf.neuralNet, colorize=TRUE)
>lines(perf.randomForest)

但我明白了:

错误 en as.double(y) : 无法将类型“S4”强制为“double”类型的向量

谢谢!

【问题讨论】:

    标签: r plot roc


    【解决方案1】:

    R 具有在一个窗口中绘制多个绘图的功能。如果软件包不支持一个窗口中的多个绘图,您可以使用 R 的标准仪器解决问题。其他方式:Example of several ROCs 带有此脚本的文章:An example of ROC curves plotting with ROCR

    【讨论】:

    • 谢谢!唯一的问题是这个解决方案似乎是针对交叉验证数据的,所以不可能例如添加一个图例来区分哪条曲线属于哪个分类器。在同一个窗口中绘制多个绘图的工具有哪些?
    • 您可以使用函数 subplot 或查看此文档:[链接]statmethods.net/advgraphs/layout.html
    【解决方案2】:

    您的lines 方法的问题在于ROCR 包中定义的performance 类对象没有通用S4 行函数。但是您可以像使用额外的 add = TRUE 参数一样使用通用绘图函数。例如这部分来自?plot.performance的示例页面:

    library(ROCR)
    data(ROCR.simple)
    pred <- prediction( ROCR.simple$predictions, ROCR.simple$labels )
    pred2 <- prediction(abs(ROCR.simple$predictions + 
                            rnorm(length(ROCR.simple$predictions), 0, 0.1)), 
            ROCR.simple$labels)
    perf <- performance( pred, "tpr", "fpr" )
    perf2 <- performance(pred2, "tpr", "fpr")
    plot( perf, colorize = TRUE)
    plot(perf2, add = TRUE, colorize = TRUE)
    

    或者,您可以将所有预测存储在一个矩阵中,然后将所有后续步骤合二为一:

    preds <- cbind(p1 = ROCR.simple$predictions, 
                    p2 = abs(ROCR.simple$predictions + 
                    rnorm(length(ROCR.simple$predictions), 0, 0.1)))
    
    pred.mat <- prediction(preds, labels = matrix(ROCR.simple$labels, 
                    nrow = length(ROCR.simple$labels), ncol = 2) )
    
    perf.mat <- performance(pred.mat, "tpr", "fpr")
    plot(perf.mat, colorize = TRUE)
    

    顺便说一句,如果您出于某种原因真的想使用lines 来绘制连续的 ROC 曲线,您将不得不这样做。像这样:

    plot(perf) 
    lines(perf2@x.values[[1]], perf2@y.values[[1]], col = 2)
    

    【讨论】:

    • 太棒了!正是我想要的!
    【解决方案3】:

    呼应@adibender,并添加评论:该示例不包括如何使用第二种(一次全部绘制)方法为每条曲线设置单独的颜色。在这种情况下,将 col 作为列表传递:

    library(ROCR)
    data(ROCR.hiv)
    x   <- prediction(ROCR.hiv$hiv.nn$predictions, ROCR.hiv$hiv.nn$labels)
    ROC <- performance(x, "tpr", "fpr")
    plot(ROC, col = as.list(1:10))
    

    【讨论】:

      猜你喜欢
      • 2017-06-09
      • 1970-01-01
      • 2019-03-16
      • 2019-02-27
      • 1970-01-01
      • 2012-07-13
      • 2016-05-26
      • 2021-03-03
      • 1970-01-01
      相关资源
      最近更新 更多