需要将插入符中的 confusionMatrix 应用于已计算的混淆矩阵
Need to apply confusionMatrix from caret to an already computed confusion matrix
我有一个用另一个软件计算的混淆矩阵,它保存在一个文本文件中。有4个类没有出现在这个文件中。我们可以参考类 C1、C2、C3、C4。输入文件 conf_mat.txt 的内容如下所示:
830 0 10 0
0 1262 18 0
3 37 1262 18
1 0 5 1314
我阅读了如下文件:
cm <- read.table("conf_mat.txt")
看起来如下:
V1 V2 V3 V4
1 830 0 10 0
2 0 1262 18 0
3 3 37 1262 18
4 1 0 5 1314
我需要使用 byClass 计算统计数据,例如来自该矩阵的灵敏度、特异性、F1 等,因此 confusionMatrix 确实是有用。但是我没有每个样本的 actual 和 predicted 列表。
如果这对以后的人有帮助,这是我找到的答案。
我根据输入混淆矩阵的列构造了类:
class0 <- rep(c('C0', 'C1', 'C2', 'C3'), cm[,1])
class1 <- rep(c('C0', 'C1', 'C2', 'C3'), cm[,2])
class2 <- rep(c('C0', 'C1', 'C2', 'C3'), cm[,3])
class3 <- rep(c('C0', 'C1', 'C2', 'C3'), cm[,4])
我用正确的 类:
创建了一个数组
trueClass <- c(rep('C0', sum(cm[,1])), rep('C1', sum(cm[,2])), rep('C2', sum(cm[,3])), rep('C3', sum(cm[,4])))
还有一个是预测的:
predictedClass <- c(class0, class1, class2, class3)
然后将confusionMatrix应用于两个数组
newCM <- confusionMatrix(predictedClass, trueClass)
newCM
这会导致与从文本文件中读取的混淆矩阵相同,但会计算额外的统计信息。
Confusion Matrix and Statistics
Reference
Prediction C0 C1 C2 C3
C0 830 0 10 0
C1 0 1262 18 0
C2 3 37 1262 18
C3 1 0 5 1314
Overall Statistics
Accuracy : 0.9807
95% CI : (0.9763, 0.9844)
No Information Rate : 0.2798
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 0.974
Mcnemar's Test P-Value : NA
Statistics by Class:
Class: C0 Class: C1 Class: C2 Class: C3
Sensitivity 0.9952 0.9715 0.9745 0.9865
Specificity 0.9975 0.9948 0.9833 0.9982
Pos Pred Value 0.9881 0.9859 0.9561 0.9955
Neg Pred Value 0.9990 0.9894 0.9904 0.9948
Prevalence 0.1752 0.2729 0.2721 0.2798
Detection Rate 0.1744 0.2651 0.2651 0.2761
Detection Prevalence 0.1765 0.2689 0.2773 0.2773
Balanced Accuracy 0.9963 0.9832 0.9789 0.9924
我有一个用另一个软件计算的混淆矩阵,它保存在一个文本文件中。有4个类没有出现在这个文件中。我们可以参考类 C1、C2、C3、C4。输入文件 conf_mat.txt 的内容如下所示:
830 0 10 0
0 1262 18 0
3 37 1262 18
1 0 5 1314
我阅读了如下文件:
cm <- read.table("conf_mat.txt")
看起来如下:
V1 V2 V3 V4
1 830 0 10 0
2 0 1262 18 0
3 3 37 1262 18
4 1 0 5 1314
我需要使用 byClass 计算统计数据,例如来自该矩阵的灵敏度、特异性、F1 等,因此 confusionMatrix 确实是有用。但是我没有每个样本的 actual 和 predicted 列表。
如果这对以后的人有帮助,这是我找到的答案。
我根据输入混淆矩阵的列构造了类:
class0 <- rep(c('C0', 'C1', 'C2', 'C3'), cm[,1])
class1 <- rep(c('C0', 'C1', 'C2', 'C3'), cm[,2])
class2 <- rep(c('C0', 'C1', 'C2', 'C3'), cm[,3])
class3 <- rep(c('C0', 'C1', 'C2', 'C3'), cm[,4])
我用正确的 类:
创建了一个数组trueClass <- c(rep('C0', sum(cm[,1])), rep('C1', sum(cm[,2])), rep('C2', sum(cm[,3])), rep('C3', sum(cm[,4])))
还有一个是预测的:
predictedClass <- c(class0, class1, class2, class3)
然后将confusionMatrix应用于两个数组
newCM <- confusionMatrix(predictedClass, trueClass)
newCM
这会导致与从文本文件中读取的混淆矩阵相同,但会计算额外的统计信息。
Confusion Matrix and Statistics
Reference
Prediction C0 C1 C2 C3
C0 830 0 10 0
C1 0 1262 18 0
C2 3 37 1262 18
C3 1 0 5 1314
Overall Statistics
Accuracy : 0.9807
95% CI : (0.9763, 0.9844)
No Information Rate : 0.2798
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 0.974
Mcnemar's Test P-Value : NA
Statistics by Class:
Class: C0 Class: C1 Class: C2 Class: C3
Sensitivity 0.9952 0.9715 0.9745 0.9865
Specificity 0.9975 0.9948 0.9833 0.9982
Pos Pred Value 0.9881 0.9859 0.9561 0.9955
Neg Pred Value 0.9990 0.9894 0.9904 0.9948
Prevalence 0.1752 0.2729 0.2721 0.2798
Detection Rate 0.1744 0.2651 0.2651 0.2761
Detection Prevalence 0.1765 0.2689 0.2773 0.2773
Balanced Accuracy 0.9963 0.9832 0.9789 0.9924