是否有任何工具/ R包可用于计算混淆矩阵的准确度和精密度?公式和数据结构为here。
3qpi33ja1#
是的,你可以用confusion matrix在R中计算准确度和精度。它使用Caret package。下面是一个例子:
lvs <- c("normal", "abnormal") truth <- factor(rep(lvs, times = c(86, 258)), levels = rev(lvs)) pred <- factor( c( rep(lvs, times = c(54, 32)), rep(lvs, times = c(27, 231))), levels = rev(lvs)) xtab <- table(pred, truth) # load Caret package for computing Confusion matrix library(caret) confusionMatrix(xtab)
而xtab的混淆矩阵应该是这样的:
Confusion Matrix and Statistics truth pred abnormal normal abnormal 231 32 normal 27 54 Accuracy : 0.8285 95% CI : (0.7844, 0.8668) No Information Rate : 0.75 P-Value [Acc > NIR] : 0.0003097 Kappa : 0.5336 Mcnemar's Test P-Value : 0.6025370 Sensitivity : 0.8953 Specificity : 0.6279 Pos Pred Value : 0.8783 Neg Pred Value : 0.6667 Prevalence : 0.7500 Detection Rate : 0.6715 Detection Prevalence : 0.7645 'Positive' Class : abnormal
你要的东西都在这了。
t1rydlwq2#
@Harsh Trivedi
byClass允许您从摘要中提取 * 精度 * 和 * 召回率 *。PPV是精确的。敏感是回忆。https://en.wikipedia.org/wiki/Precision_and_recall
library(caret) result <- confusionMatrix(prediction, truth) precision <- result$byClass['Pos Pred Value'] recall <- result$byClass['Sensitivity']
我想你想把精确度和召回率拿出来计算 * f度量 *,所以就这样吧。
f_measure <- 2 * ((precision * recall) / (precision + recall))
我还发现了这个方便的在线计算器的健全检查。http://www.marcovanetti.com/pages/cfmatrix/?noc=2-bg
km0tfn4u3#
如果有人和我有同样的问题,caret中的confusionMatrix()方法确实给予灵敏度/特异性。然而,如果它被馈送一个train类型的对象,它将运行一个不同的方法,confusionMatrix.train(),它没有没有这个信息。解决方案是从train对象(即reference对象)手动馈送data和reference。$pred$pred$和$pred$obs)到confusionMatrix()方法。
caret
confusionMatrix()
train
confusionMatrix.train()
reference
data
$pred$pred$
$pred$obs
vh0rcniy4#
如果有人在看:多亏了BGA的上述回答,我更清楚地了解了如何读取confusionMatrix()输出,并意识到您可以从result$ByClass输出中获得F1的F测量值。
result$ByClass
result$byClass Sensitivity Specificity Pos Pred Value Neg Pred Value 0.9337442 0.8130531 0.8776249 0.8952497 Precision Recall F1 Prevalence 0.8776249 0.9337442 0.9048152 0.5894641 Detection Rate Detection Prevalence Balanced Accuracy 0.5504087 0.6271571 0.8733987
用与上面评论相同的公式计算下面的f_measure也得到0.9048152。您也可以从results$overall获取精度
f_measure
results$overall
result$overall Accuracy Kappa AccuracyLower AccuracyUpper AccuracyNull AccuracyPValue 8.841962e-01 7.573509e-01 8.743763e-01 8.935033e-01 5.894641e-01 0.000000e+00 McnemarPValue 2.745521e-13
或使用results的平衡精度
results
fae0ux8s5#
比自己计算F1分数或使用result$byClass方便得多,您可以使用**confusionMatrix**中的mode参数来打印F1分数,召回率和精度。默认值为confusionMatrix(..., mode = "sens_spec"),显示灵敏度和特异性。使用mode = "prec_recall"显示F1分数、召回率和精确率。要显示所有这些,请使用mode = "everything":
result$byClass
confusionMatrix
mode
confusionMatrix(..., mode = "sens_spec")
mode = "prec_recall"
mode = "everything"
library(caret) x <- matrix(c(231, 27, 32, 54), nrow = 2) x #> [,1] [,2] #> [1,] 231 32 #> [2,] 27 54 confusionMatrix(x, mode = "everything") #> Confusion Matrix and Statistics #> #> A B #> A 231 32 #> B 27 54 #> #> Accuracy : 0.8285 #> 95% CI : (0.7844, 0.8668) #> No Information Rate : 0.75 #> P-Value [Acc > NIR] : 0.0003097 #> #> Kappa : 0.5336 #> #> Mcnemar's Test P-Value : 0.6025370 #> #> Sensitivity : 0.8953 #> Specificity : 0.6279 #> Pos Pred Value : 0.8783 #> Neg Pred Value : 0.6667 #> Precision : 0.8783 #> Recall : 0.8953 #> F1 : 0.8868 #> Prevalence : 0.7500 #> Detection Rate : 0.6715 #> Detection Prevalence : 0.7645 #> Balanced Accuracy : 0.7616 #> #> 'Positive' Class : A
5条答案
按热度按时间3qpi33ja1#
是的,你可以用confusion matrix在R中计算准确度和精度。它使用Caret package。
下面是一个例子:
而xtab的混淆矩阵应该是这样的:
你要的东西都在这了。
t1rydlwq2#
@Harsh Trivedi
byClass允许您从摘要中提取 * 精度 * 和 * 召回率 *。PPV是精确的。敏感是回忆。https://en.wikipedia.org/wiki/Precision_and_recall
我想你想把精确度和召回率拿出来计算 * f度量 *,所以就这样吧。
我还发现了这个方便的在线计算器的健全检查。http://www.marcovanetti.com/pages/cfmatrix/?noc=2
-bg
km0tfn4u3#
如果有人和我有同样的问题,
caret
中的confusionMatrix()
方法确实给予灵敏度/特异性。然而,如果它被馈送一个train
类型的对象,它将运行一个不同的方法,confusionMatrix.train()
,它没有没有这个信息。解决方案是从
train
对象(即reference
对象)手动馈送data
和reference
。$pred$pred$
和$pred$obs
)到confusionMatrix()
方法。vh0rcniy4#
如果有人在看:多亏了BGA的上述回答,我更清楚地了解了如何读取
confusionMatrix()
输出,并意识到您可以从result$ByClass
输出中获得F1的F测量值。用与上面评论相同的公式计算下面的
f_measure
也得到0.9048152。您也可以从
results$overall
获取精度或使用
results
的平衡精度fae0ux8s5#
比自己计算F1分数或使用
result$byClass
方便得多,您可以使用**confusionMatrix
**中的mode
参数来打印F1分数,召回率和精度。默认值为
confusionMatrix(..., mode = "sens_spec")
,显示灵敏度和特异性。使用mode = "prec_recall"
显示F1分数、召回率和精确率。要显示所有这些,请使用mode = "everything"
: