如何从插入符号的混乱矩阵中提取准确度?

时间:2014-05-02 17:20:35

标签: r

我试图从confusionMatrix()输出中提取Accuracy值 - 我尝试过使用以下内容:

    cl <- train.data[,1]
    knn.res <- knn.cv(train.data[,c(2:783)], cl, k = i, algorithm = "cover_tree")
    confus.knn.res <- confusionMatrix(knn.res, train.data[,1])
    confus.knn.res
    k.accuracy[which(k.accuracy[,2]==i),2] <- confus.knn.res$Accuracy

虽然只是称它为$ Accuracy似乎不起作用。

4 个答案:

答案 0 :(得分:7)

confusionMatrix()对象的一个​​值是整体 - 整体的第一个索引是准确度值。因此,它可以称为confus.knn.res $ overall [1]。

答案 1 :(得分:4)

由于overall是一个命名向量,因此用户友好的方式是confus.knn.res$overall["Accuracy"]

答案 2 :(得分:0)

虽然我很晚才回答,但它可以帮助其他人计算所需的所有参数。它可以通过从混淆矩阵中检索值并通过以下代码计算来完成:

    conf_train<-table(training$Activity, predictions) #from predicted values


    conf_train<-confusionMatrix(fit.knn,norm = "none")  
#from cross validation of training set, internal
RF.statistics_train = matrix(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), nrow=3, ncol=5) 
colnames(RF.statistics_train )<- c('Precision', 'Sensitivity', 'Specificity', 'Accuracy', 'MCC')
rownames(RF.statistics_train) <- c('Class1', 'Class2', 'Class3')
for(i in 1:3)
{
  TP=conf_train$table[i,i]
  TN=0
  FP=0
  FN=0
  for(j in 1:3)
  {
    if(i!=j)
    {
      FP = FP + conf_train$table[j,i]
      FN = FN + conf_train$table[i,j]
    }
    for(k in 1:3)
    {
      if(i!=j && i!=k)
      {
        TN = TN + conf_train$table[j,k]
      }
    }
  }
  #  statistics[i,1] = conf_test[i,i]/col_total[i]
  #  statistics[i,2] = conf_test[i,i]/row_total[i]
  RF.statistics_train[i,1] = TP/(TP+FP)
  RF.statistics_train[i,2] = TP/(TP+FN)
  RF.statistics_train[i,3] = TN/(TN+FP)
  RF.statistics_train[i,4] = (TP+TN)/(TP+TN+FP+FN)
  RF.statistics_train[i,5] = (TP*TN-FP*FN)/sqrt((TP+FP)*(TP+FN)*(TN+FP)*(TN+FN))`
}

代码用于三个类矩阵,但您可以相应地修改

答案 3 :(得分:0)

如果仅需要输出值(即总精度值),则应使用以下方括号:

confus.knn.res $ overall [[1]]#总体准确性是第一个对象!