2016-06-06 3 views
2

Hallo ich mit sklearn und um arbeite besser die Metriken zu verstehen, folgte ich das folgende Beispiel precision_score:Wie berechnet sklearn die metrik precision_score?

from sklearn.metrics import precision_score 
    y_true = [0, 1, 2, 0, 1, 2] 

    y_pred = [0, 2, 1, 0, 0, 1] 
    print(precision_score(y_true, y_pred, average='macro')) 

das Ergebnis, das ich habe folgendes wurde:

0.222222222222 

Ich verstehe dass sklearn berechnen, die folgenden Schritte führen:

  • für Etiketten 0 Präzision tp/(tp + fp) = 2/(2 + 1) = 0,66
  • für Etiketten 1 Präzision ist 0/(0 + 2) = 0
  • für Etiketten 2 Präzision 0/(0 + 1) = 0

und schließlich sklearn berechnet Präzision von allen drei Etikett bedeuten: precision = (0.66 + 0 + 0)/3 = 0.22

dieses Ergebnis ist gegeben, wenn wir diese Parameter übernehmen:

precision_score(y_true, y_pred, average='macro') 

auf der anderen Seite, wenn wir diese Parameter nehmen, ändert Durchschnitt = ‚Mikro‘:

precision_score(y_true, y_pred, average='micro') 

dann erhalten wir:

0.33 

und wenn wir 'gewichtete' mittel = nehmen:

precision_score(y_true, y_pred, average='weighted') 

dann erhalten wir:

0.22. 

Ich verstehe nicht, Nun, wie Sklearn diese Metrik berechnet, wenn der Durchschnittsparameter auf "gewichtet" oder "Mikro" eingestellt ist, I r Ich würde es gerne würdigen, wenn mir jemand eine klare Erklärung dafür geben könnte.

Antwort

2

'micro':

Metriken berechnen global durch jedes Element des Etiketts Indikatormatrix als Etikett berücksichtigen.

'macro':

berechnen Metriken für jedes Etikett und ihre ungewichtete Mittelwert finden. Diese berücksichtigt nicht die Etikettenunwucht.

'weighted':

berechnen Metriken für jedes Etikett und dessen Durchschnitt finden durch die Unterstützung (für jedes Etikett der Anzahl der wahren Instanzen) gewichtet.

'samples':

berechnen Metriken für jede Instanz, und dessen Durchschnitt finden.

http://scikit-learn.org/stable/modules/generated/sklearn.metrics.average_precision_score.html

Für Fördermaßnahmen: http://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html

Grundsätzlich Klassenzugehörigkeit.

3.3.2.12. Receiver-Betriebskennlinie (ROC)

Die Funktion roc_curve berechnet die Receiver-Betriebskennlinie bzw. ROC-Kurve. Zitieren Wikipedia:

"Ein Receiver Betriebskennlinie (ROC), oder einfach ROC-Kurve, ist eine grafische Darstellung, die die Leistung eines binären Klassifikator-System veranschaulicht, wie seine Diskriminierungsschwelle variiert wird. Es wird erstellt, indem der Anteil der wahren positiven Werte aus den positiven Werten (TPR = echte positive Rate) gegen den Anteil der falsch positiven Werte der negativen Werte (FPR = falsch positive Rate) bei verschiedenen Schwellenwerten aufgetragen wird. TPR ist auch als Empfindlichkeit bekannt und FPR ist eins minus der Spezifität oder wahre negative Rate „

TN/Wahre Negativ:. Fall war negativ und sagte voraus, negativ.

TP/Wahr Positiv: Fall war positiv und vorhergesagt positiv.

FN/falsch negativ: Fall war positiv, aber vorhergesagt negativ.

FP/Falsch-Positiv: Fall war negativ, aber vorhergesagt positiv # Grundsätzliche Terminologie

confusion = metrics.confusion_matrix(expected, predicted) 
print confusion,"\n" 
TN, FP = confusion[0, 0], confusion[0, 1] 
FN, TP = confusion[1, 0], confusion[1, 1] 

print 'Specificity:  ', round(TN/float(TN + FP),3)*100, "\n" 
print 'Sensitivity:  ', round(TP/float(TP + FN),3)*100, "(Recall)" 
+0

dank ich es schon gelesen, aber ich würde gerne wissen, was durch die Unterstützung gewichtet wird (die Anzahl der wahren Instanzen für jedes Etikett) – neo33

+0

Betrachten Sie es als eine phantastische Art, gewichteten Durchschnitt nach Klasse – Merlin

+0

zu sagen, aber wissen Sie, ob sklearn in der Dokumentation die Empfindlichkeit und Spezifität definieren? – neo33

Verwandte Themen