2015-10-12 6 views
8

Wie berechne ich Genauigkeit, Präzision und Rückruf für jede Klasse von einem Naive Modell Bayes? Ich verwende den eingebetteten Datensatz: Iris und Paket Baum und Paket E1071 für Naive Bayes. Die Verwirrung Matrix ist wie folgt:Genauigkeit, Präzision und Rückruf für Multi-Class-Modell

prediction setosa versicolor virginica 
setosa   29   0   0 
versicolor  0   20   2 
virginica  0   3  21 

PS: beachten Sie, dass ich bin mit 75 Einträgen wie der Trainingssatz und andere für die Prüfung:

iris.train <- c(sample(1:150, 75)) # have selected 75 randomly 

Antwort

13

In dieser Antwort wird mat die Konfusionsmatrix, die Sie beschreiben.

Sie können berechnen und zu speichern Genauigkeit mit:

(precision <- diag(mat)/rowSums(mat)) 
#  setosa versicolor virginica 
# 1.0000000 0.9090909 0.8750000 
:

(accuracy <- sum(diag(mat))/sum(mat)) 
# [1] 0.9333333 

Präzision für jede Klasse (vorausgesetzt, die Vorhersagen sind in den Zeilen und die wahren Ergebnisse sind auf den Säulen) mit berechnet werden

Wenn Sie die Genauigkeit für eine bestimmte Klasse packen wollten, könnten Sie tun:

(precision.versicolor <- precision["versicolor"]) 
# versicolor 
# 0.9090909 
recall <- (diag(mat)/colSums(mat)) 
#  setosa versicolor virginica 
# 1.0000000 0.8695652 0.9130435 

Wenn Sie Rückruf für eine bestimmte Klasse wollen, man könnte etwas tun, wie:Recall für jede Klasse (wieder unter der Annahme, die Vorhersagen sind in den Zeilen und die wahren Ergebnisse sind auf den Säulen) mit berechnet werden:

(recall.virginica <- recall["virginica"]) 
# virginica 
# 0.9130435 

Wenn Sie stattdessen die tatsächlichen Ergebnisse, wie die Zeilen und die vorhergesagten Ergebnisse wie die Spalten hatte, dann würden Sie die Präzision drehen und Definitionen wieder zu verwenden.

Daten:

(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 
+1

Ist es möglich, eine Gesamt F-Score für diese Daten zu geben, indem mittelt Anwendung? –

+1

@mlee_jordan Ja kannst du. Eine Ressource für weitere Untersuchungen ist das scikit-learn Handbuch: http://scikit-learn.org/stable/modules/classes.html#module-sklearn.metrics. Es kann jedoch bessere, allgemeinere Ressourcen geben. Wenn Sie den F-Score in einem Multiclass-Fall berechnen, berechnet er automatisch den Score und den Durchschnitt pro Klasse. In anderen Fällen, wie zum Beispiel Rückruf, haben Sie die Möglichkeit, Mikronittelwerte (zählen Sie alle TP, FN, FP und berechnen Sie die Punktzahl) oder Makro-Mittelwerte (berechnen Sie die Punktzahl pro Klasse und Durchschnitt) bei der Berechnung der Punktzahl. – Cerno

Verwandte Themen