首页 > 解决方案 > e1071::svm() 中的总准确度

问题描述

如何在 e1071::svm() 中实际计算总准确度?与从混淆表计算的不一样:

> x <- subset(iris, select = -Species)
> y <- iris$Species
> model <- svm(x, y,cross=10)
> model$tot.accuracy
[1] 96
> caret::confusionMatrix(y,model$fitted)
Confusion Matrix and Statistics

            Reference
Prediction   setosa versicolor virginica
  setosa         50          0         0
  versicolor      0         48         2
  virginica       0          2        48

Overall Statistics

               Accuracy : 0.9733          
  ...

标签: rsvm

解决方案


总准确度是在拟合过程中获得的交叉验证准确度。对于数据的每次拆分,模型都是拟合的,并计算相应验证数据集的准确性。

个体精度可以从

cv_accuracies <- model$accuracies
all.equal(mean(cv_accuracies), model$tot.accuracy)
[1] TRUE

请注意,由于交叉验证将数据分成 10 个不同的训练和验证对,其中验证集未用于拟合过程,因此与将最终模型预测到整个训练集时的准确度相比,该准确度会有所不同.

sum(fitted(model) == y)/length(y)
[1] 0.97333333
mean(cv_accuracies)
[1] 96.66667

(注意1乘以100作为标准)


推荐阅读