代码之家  ›  专栏  ›  技术社区  ›  KingMaker

R过程精度

  •  2
  • KingMaker  · 技术社区  · 7 年前

    我想使用pROC包并找到精度。问题是我没有TP/TN/FP/FN值。相反,我给出了“好”或“差”分类的概率,如:

        GoodPoor=c("Good","Good","Poor","Poor","Good","Good","Poor","Poor","Good","Poor")
        prob1=c(0.73, 0.69, 0.44, 0.55, 0.67, 0.47, 0.08, 0.15, 0.45, 0.35)
    

    所以我创建了roc()对象,给出了我想要的阈值

        M1=as.list(cbind(GoodPoor, prob1))
        roc1_t5<-roc(GoodPoor ~ prob1, M1, thresholds = 0.5)
    

    现在,我知道pROC包通过roc1\u t5$敏感性和roc1\u t5$特异性提供了特异性和敏感性,但它似乎没有提供精确性。我的问题是:有没有一种方法可以在不使用其他“roc”包的情况下获得精度?谢谢你抽出时间

    1 回复  |  直到 7 年前
        1
  •  2
  •   Eugene Brown    7 年前

    这个 coords 函数将返回ROC曲线的精度(如果需要,还可以返回其他值),只要您还提供阈值。

    例子:

    > coords(roc1_t5, 0.5, ret=c("threshold", "precision", "recall"))
    threshold precision    recall 
    0.5000000 0.6666667 0.8000000 
    

    示例以及 sapply ,以便在更改阈值时查看值:

    > sapply(seq(0, 1, by=0.05), function(x) coords(roc1_t5, x, ret=c("precision", "recall")))
              [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]     [,11]     [,12]
    precision  NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0   0.8 0.6666667 0.7142857
    recall       0    0  0.2  0.4  0.4  0.4  0.4  0.6  0.6   0.8 0.8000000 1.0000000
                  [,13]     [,14]     [,15] [,16] [,17] [,18] [,19] [,20] [,21]
    precision 0.7142857 0.7142857 0.5555556   0.5   0.5   0.5   0.5   0.5   0.5
    recall    1.0000000 1.0000000 1.0000000   1.0   1.0   1.0   1.0   1.0   1.0
    

    同时检查 "all" 特定阈值的值位置:

    > coords(roc1_t5, "all", ret = c("threshold", "recall", "precision"))
          all       all   all       all       all  all   all   all  all   all  
    
    all
    threshold Inf 0.7100000 0.680 0.6100000 0.5100000 0.46 0.445 0.395 0.25 0.115 -Inf
    recall    1.0 1.0000000 1.000 1.0000000 0.8000000 0.80 0.800 0.600 0.40 0.200    0
    precision 0.5 0.5555556 0.625 0.7142857 0.6666667 0.80 1.000 1.000 1.00 1.000  NaN
    

    最后,您的另一个选择是将精度和召回率绘制在一起:

    plot(precision ~ recall, t(coords(roc1_t5, "all", ret = c("recall", "precision"))), type="l")
    

    看看更多的可能性 ret 文档中的参数:

    ?coords