R 过程精度
R pROC precision
我想使用 pROC 包并找到精度。问题是我没有 TP/TN/FP/FN 值。相反,我有 "Good" 或 "Poor" 分类的给定概率,例如:
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_t5$sensitivities 和 roc1_t5$specificities 提供了特异性和敏感性,但它似乎没有提供精度。我的问题是:有没有办法在不使用其他 'roc' 包的情况下获得精度?谢谢你的时间
只要您还提供阈值,coords
函数将 return 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
我想使用 pROC 包并找到精度。问题是我没有 TP/TN/FP/FN 值。相反,我有 "Good" 或 "Poor" 分类的给定概率,例如:
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_t5$sensitivities 和 roc1_t5$specificities 提供了特异性和敏感性,但它似乎没有提供精度。我的问题是:有没有办法在不使用其他 'roc' 包的情况下获得精度?谢谢你的时间
只要您还提供阈值,coords
函数将 return 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