R:您如何计算KNN的预测准确性


library(caret)
irisFit1 <- knn3(Species ~ ., iris)
irisFit2 <- knn3(as.matrix(iris[, -5]), iris[,5])
data(iris3)
train <- rbind(iris3[1:25,,1], iris3[1:25,,2], iris3[1:25,,3])
test <- rbind(iris3[26:50,,1], iris3[26:50,,2], iris3[26:50,,3])
cl <- factor(c(rep("s",25), rep("c",25), rep("v",25)))
> knn3Train(train, test, cl, k = 5, prob = TRUE)
 [1] "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "c"
[27] "c" "v" "c" "c" "c" "c" "c" "v" "c" "c" "c" "c" "c" "c" "c" "c" "c" "c" "c" "c" "c" "c" "c" "c" "v" "c"
[53] "c" "v" "v" "v" "v" "v" "c" "v" "v" "v" "v" "c" "v" "v" "v" "v" "v" "v" "v" "v" "v" "v" "v"
attr(,"prob")
              c s         v
 [1,] 0.0000000 1 0.0000000
 [2,] 0.0000000 1 0.0000000
 [3,] 0.0000000 1 0.0000000
 [4,] 0.0000000 1 0.0000000
 [5,] 0.0000000 1 0.0000000
 [6,] 0.0000000 1 0.0000000
  ...

我正在使用caret软件包的knn3玩具示例。似乎最后一个电话返回了预测概率的列表。虽然s的预测概率为1的列表明预测的物种为s,但在其他一些行中,物种c的预测概率为0.2,而物种v的概率为0.8。在这种情况下,预测结果是什么?我猜这是v的物种,因为它的预测概率更高?

是否有一个函数调用可以快速评估knn模型的准确性?

首先,保存您的预测:

fit=knn3Train(train, test, cl, k = 5, prob = TRUE)

然后,您需要一个混乱矩阵:

cm = as.matrix(table(Actual = cl, Predicted = fit))

现在您可以计算准确性:

sum(diag(cm))/length(cl)

或其他任何其他性能测量值:https://en.wikipedia.org/wiki/precision_and_recall