在R中从混淆矩阵的结果计算精度、召回率和F值

5
我有以下混淆矩阵,现在需要根据这个矩阵计算精确度、召回率和F分数,我该如何使用已有的值来做到这一点? 混淆矩阵和统计数据。
      Reference
Prediction One Zero
      One   37   43
      Zero  19  131

               Accuracy : 0.7304          
                 95% CI : (0.6682, 0.7866)
    No Information Rate : 0.7565          
    P-Value [Acc > NIR] : 0.841087        

                  Kappa : 0.3611          
 Mcnemar's Test P-Value : 0.003489        

            Sensitivity : 0.6607          
            Specificity : 0.7529          
         Pos Pred Value : 0.4625          
         Neg Pred Value : 0.8733          
             Prevalence : 0.2435          
         Detection Rate : 0.1609          
   Detection Prevalence : 0.3478          
      Balanced Accuracy : 0.7068          

       'Positive' Class : One

我在其他用户的建议下使用了以下编辑过的代码。
library(class)
library(e1071)
library(caret)
library(party)
library(nnet)
library(forecast)
pimad <- read.csv("C:/Users/USER/Desktop/AMAN/pimad.csv")
nrow(pimad)  
set.seed(9850)
gp<-runif(nrow(pimad))
pimad<-pimad[order(gp),]
idx <- createDataPartition(y = pimad$class, p = 0.7, list = FALSE)
train<-pimad[idx,]
test<-pimad[-idx,]
svmmodel<-svm(class~.,train,kernel="radial")
psvm<-predict(svmmodel,test)
table(psvm,test$class)
library(sos)
findFn("confusion matrix precision recall FScore")
df<-(confusionMatrix(test$class, psvm))
dim(df)
df[1,2]/sum(df[1,2:3])
df

这应该会有所帮助:https://en.wikipedia.org/wiki/Confusion_matrix - RHertel
install.packages(sos); library(sos); findFn("confusion matrix precision recall FScore") - user3710546
@Pascal 这是做什么的? - amankedia
它会搜索能够计算你所寻找的内容的函数。在在这里提问之前可以先尝试一下。 - user3710546
3个回答

6

您无需进行其他操作,已经在df中获得了所有请求的数据。只需输入:

ls(df) [1] "byClass" "dots" "mode" "overall" "positive" "table"

df$byClass # 这是我处理过的另一个示例

现在所有参数,包括敏感性、特异性、阳性预测值、阴性预测值、精确度、召回率、F1、患病率、检出率、检出患病率和平衡准确率都会显示在表格中。


1
很简单,对矩阵进行子集计算。
如果您的混淆矩阵称为df,可以使用这里这里中的公式:
df
  Prediction One Zero
1        One  37   43
2       Zero  19  131

# Precision: tp/(tp+fp):
df[1,1]/sum(df[1,1:2])
[1] 0.4625

# Recall: tp/(tp + fn):
df[1,1]/sum(df[1:2,1])
[1] 0.6607143

# F-Score: 2 * precision * recall /(precision + recall):
2 * 0.4625 * 0.6607143 / (0.4625 + 0.6607143)
[1] 0.5441177

我将代码更改为df <-(confusionMatrix(test $ class,psvm)) df [1,2] / sum(df [1,2:3]) 但是会生成以下错误:Error in df [1, 2]:维数不正确。 - amankedia
你的 df 是什么样子?dim(df) 返回什么? - DatamineR
请执行以下操作:df <- confusionMatrix(df)$table - DatamineR
生成以下错误:sort.list(y) 中的错误:'x' 必须是原子的才能进行 'sort.list' 操作。您是否在列表上调用了 'sort'? - amankedia
谢谢你,但我使用了另一种方法来完成它。 - amankedia
显示剩余3条评论

0
cm<-confusionMatrix(table(test_actual,test_predicted))
cm$byclass
cm$overall

注意1:cm是由R的caret库获得的混淆矩阵

注意2:cm$byclass给出了:灵敏度、特异性、阳性预测值、阴性预测值、精确度、召回率、F1、患病率、检测率、检测患病率、平衡准确度

注意3:cm$overall给出了准确度、Kappa系数、准确度下限、准确度上限、零分类器准确度、准确度P值


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接