我试图从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似乎不起作用。
答案 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]]#总体准确性是第一个对象!