Comment calculer la précision , la précision et rappel pour chaque classe d'un modèle Naive Bayes? J'utilise l'ensemble de données intégré: iris et package arbre et package e1071 pour Naive Bayes. La matrice de confusion est la suivante:
prediction setosa versicolor virginica
setosa 29 0 0
versicolor 0 20 2
virginica 0 3 21
P.S: notez que j'utilise 75 entrées comme kit de formation et autres pour les tests:
iris.train <- c(sample(1:150, 75)) # have selected 75 randomly
Tout au long de cette réponse, mat
est la matrice de confusion que vous décrivez.
Vous pouvez calculer et stocker la précision avec:
(accuracy <- sum(diag(mat)) / sum(mat))
# [1] 0.9333333
La précision pour chaque classe (en supposant que les prédictions sont sur les lignes et les vrais résultats sont sur les colonnes) peut être calculée avec:
(precision <- diag(mat) / rowSums(mat))
# setosa versicolor virginica
# 1.0000000 0.9090909 0.8750000
Si vous vouliez saisir la précision d'une classe particulière, vous pourriez faire:
(precision.versicolor <- precision["versicolor"])
# versicolor
# 0.9090909
Le rappel pour chaque classe (en supposant à nouveau que les prédictions sont sur les lignes et que les vrais résultats sont sur les colonnes) peut être calculé avec:
recall <- (diag(mat) / colSums(mat))
# setosa versicolor virginica
# 1.0000000 0.8695652 0.9130435
Si vous vouliez rappeler pour une classe particulière, vous pourriez faire quelque chose comme:
(recall.virginica <- recall["virginica"])
# virginica
# 0.9130435
Si, à la place, vous aviez les vrais résultats comme lignes et les résultats prévus comme colonnes, vous inverseriez les définitions de précision et de rappel.
Les données:
(mat = as.matrix(read.table(text=" setosa versicolor virginica
setosa 29 0 0
versicolor 0 20 2
virginica 0 3 21", header=T)))
# setosa versicolor virginica
# setosa 29 0 0
# versicolor 0 20 2
# virginica 0 3 21