1

Ich arbeite an der Erkennung von Satzkategorien Problem. Wo jeder Satz kann auf mehrere Kategorien gehören zum Beispiel:Wie Formel F1 in Multi-Label-Klassifizierung berechnen?

"It has great sushi and even better service." 
True Label: [[ 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 1.]] 
Pred Label: [[ 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 1.]] 
Correct Prediction! 
Output: ['FOOD#QUALITY' 'SERVICE#GENERAL'] 

ich umgesetzt haben einen Klassifikator, die mehrere Kategorien vorhersagen kann. Ich habe insgesamt 587 Sätze, die zu mehreren Kategorien gehören. Ich habe die Genauigkeit Punkte auf zwei Arten berechnet:

Wenn alle Etiketten eines Beispiels vorhergesagt oder nicht?

Code:

print "<------------ZERO one ERROR------------>" 
print "Total Examples:",(truePred+falsePred) ,"True Pred:",truePred, "False Pred:", falsePred, "Accuracy:", truePred/(truePred+falsePred) 

Ausgang:

<------------ZERO one ERROR------------> 
Total Examples: 587 True Pred: 353 False Pred: 234 Accuracy: 0.60136286201 

Wie viele Etiketten sind für alle Beispiele korrekt vorhergesagt?

Code:

print "\n<------------Correct and inccorrect predictions------------>" 
print "Total Labels:",len(total[0]),"Predicted Labels:", corrPred, "Accuracy:", corrPred/len(total[0]) 

Ausgang:

<------------Correct and inccorrect predictions------------> 
Total Labels: 743 Predicted Labels: 522 Accuracy: 0.702557200538 

Problem: Das ist die Genauigkeit Scores berechnet, indem vorhergesagte Werte verglichen mit Grundwahrheit Etikett. Aber ich möchte F1-Score berechnen (mit Mikro-Mittelung), Präzision und Rückruf. Ich habe Grundwahrheitsbezeichnungen und ich muss meine Vorhersagen mit diesen Grundwahrheitsbezeichnungen zusammenbringen. Aber ich weiß nicht, wie ich diese Art von Multi-Label-Klassifizierung Problem angehen. Kann ich scikit-learn oder andere Bibliotheken in Python verwenden?

Antwort

1

Ich habe Matrix von vorhergesagten Etikett predictedlabel und ich hatte schon richtig Kategorien zu meinen Ergebnisse in y_test zu vergleichen.Also habe ich versucht, den folgenden Code:

from sklearn.metrics import classification_report 
from sklearn.metrics import f1_score 
from sklearn.metrics import roc_auc_score 

print "Classification report: \n", (classification_report(y_test, predictedlabel)) 
print "F1 micro averaging:",(f1_score(y_test, predictedlabel, average='micro')) 
print "ROC: ",(roc_auc_score(y_test, predictedlabel)) 

und ich erhielt die folgenden Ergebnisse:

 precision recall f1-score support 

     0  0.74  0.93  0.82  57 
     1  0.00  0.00  0.00   3 
     2  0.57  0.38  0.46  21 
     3  0.75  0.75  0.75  12 
     4  0.44  0.68  0.54  22 
     5  0.81  0.93  0.87  226 
     6  0.57  0.54  0.55  48 
     7  0.71  0.38  0.50  13 
     8  0.70  0.72  0.71  142 
     9  0.33  0.33  0.33  33 
    10  0.42  0.52  0.47  21 
    11  0.80  0.91  0.85  145 

    av/total 0.71  0.78  0.74  743 

F1 micro averaging: 0.746153846154 
ROC: 0.77407943841 

Also, ich bin der Berechnung meine Ergebnisse auf diese Weise!

1

Werfen Sie einen Blick auf die metrics bereits mit sklearn verfügbar und verstehen sie. Sie sind nicht für die Klassifizierung von Multiklassen-Multilabel verfügbar, sodass Sie Ihre eigenen Kategorien erstellen oder Ihre Kategorien Labels zuordnen können.

[ 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 1.] => 0 
[ 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0.] => 1 
... 

Sie müssen verstehen, was diese Lösung bedeutet: Wenn ein Beispiel 4 Klassen haben und wenn Sie 3 aus dem 4 korrekt vorhergesagt haben, eine accuracy_score verwendet, wird die gleichen als eine Vorhersage von sein 0 von 4 korrekt vorhergesagt.

Es ist ein Fehler.

Hier ein Beispiel

>>> from sklearn.metrics import accuracy_score 
>>> y_pred = [0, 2, 1, 3] 
>>> y_true = [0, 1, 2, 3] 
>>> accuracy_score(y_true, y_pred) 
0.5 
+1

Okay, können Sie mir bitte sagen, dass, wenn ich eine echte Label [0,1,0,1] und vorhergesagte Label [0,1,1,0] habe. Was wird dann die Präzision und die Erinnerung für dieses einzelne Beispiel sein? Oder was werden die TN, TP, FN und FP sein. –

+0

Wenn Sie tun, was ich vorschlage, dann wird Ihr wahres Label 0 sein und Ihre Vorhersage wird 1. Also werden Ihre Präzision und Ihr Rückruf 0 sein. Oder Sie können subtiler sein und unabhängig für jede Klasse die Präzision und den Rückruf und danach berechnen durchschnitt sie. – dooms

+0

Also, für jedes Beispiel x true label [0,1,0,1] und vorhergesagte label [0,1,1,0] können wir FP, TP, TN und TP nicht berechnen, indem wir nur die Position von 1 und 0 sehen. –