[英]What is the most efficient way of computing a confusion matrix from 2 logical vectors in R?
给定两个逻辑向量(即 R 中只有 TRUE 或 FALSE 值),长度均为 n(一个向量是预测,另一个是基本事实),计算真阳性和真阴性的最有效方法是什么,假阳性和假阴性? 只需执行tp = pred & truth
即可轻松完成真正的肯定。 但是,我认为 R 中没有其他逻辑运算符可以直接帮助计算其他统计信息。
一个明显的解决方案是遍历这两个向量并只做案例(例如,如果预测为 FALSE 且真值 FALSE 则将真负数加一),但我觉得必须有一种更快的方法。 真正的肯定情况非常好,因为它可以通过向量化的 AND 运算符来完成(我认为?)。
编辑:我的错,忘了提几个重要的细节:我的真实数据中的向量有数亿长,我需要计算混淆矩阵大约 30,000 次。 使用表格的答案很有用,因为我之前完全错过了这个选项,但我担心转换为因子并且使用表格太慢了。 我认为此时最好的选择可能是使用 Rcpp。
您可以使用caret
package 中的confusionMatrix ()
function:
代码:
library(caret)
set.seed(123)
confusionMatrix(
prediction <- factor(sample(c(0,1), 100, replace = TRUE)),
ground_truth <- factor(sample(c(0,1), 100, replace = TRUE)))
Output:
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 26 31
1 20 23
Accuracy : 0.49
95% CI : (0.3886, 0.592)
No Information Rate : 0.54
P-Value [Acc > NIR] : 0.8650
Kappa : -0.0087
Mcnemar's Test P-Value : 0.1614
Sensitivity : 0.5652
Specificity : 0.4259
Pos Pred Value : 0.4561
Neg Pred Value : 0.5349
Prevalence : 0.4600
Detection Rate : 0.2600
Detection Prevalence : 0.5700
Balanced Accuracy : 0.4956
'Positive' Class : 0
首先将二进制向量转换为因子,
pred = factor(pred, levels = c(F,T))
truth = factor(truth, levels = c(F,T))
即使没有某些配对的实例,这也将确保返回完整的 2x2 表。 列联表由下式计算
table(pred, truth)
首先转换为因子将确保没有实例的组合在结果表中将获得0
值。 例如,
pred = rep(T, 10)
truth = rep(F, 10)
table(pred,truth) # RETURNS A 1x1 TABLE
pred = factor(pred, levels = c(F,T))
truth = factor(truth, levels = c(F,T))
table(pred,truth) # RETURNS A 2x2 TABLE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.