Die Genauigkeit der Teilmenge ist in der Tat eine harte Metrik. Um ein Gefühl dafür zu bekommen, wie gut oder schlecht 0,29 ist, haben wir eine Idee:
- Sehen Sie sich an, wie viele Etiketten Sie durchschnittlich für jede Probe haben
- Sehen Sie sich die Vereinbarung zwischen Annotatoren an, falls verfügbar (falls nicht, versuchen Sie selbst zu sehen, welche Genauigkeit der Teilmenge erhalten wird, wenn Sie der Klassifikator sind).
- Überlege, ob das Thema gut definiert ist
- Sehen Sie sich an, wie viele Muster Sie für jedes Etikett haben
Sie können auch die Hamming-Punktzahl berechnen, um festzustellen, ob Ihr Klassifikator ahnungslos oder anständig gut ist, aber Probleme bei der korrekten Vorhersage aller Bezeichnungen haben. Siehe unten, um die Hamming-Punktzahl zu berechnen.
Soweit ich weiß, kann ich scikit.metrics nicht mit OneVsRestClassifier verwenden. Wie kann ich also einige Metriken (F1, Präzision, Rückruf usw.) abrufen, um herauszufinden, was nicht stimmt?
Siehe Berechnen der Genauigkeit / des Rückrufs für die Klassifizierung mit mehreren Klassen und mehreren Etiketten. . Ich habe vergessen , ob sklearn es unterstützt, ich erinnere es einige Einschränkungen hatte, zB sklearn nicht Multi-Label für Verwirrung Matrix unterstützt . Das wäre eine gute Idee, um diese Zahlen in der Tat zu sehen.
Hamming-Punktzahl :
In einer Multilabel Klassifizierung Einstellung sklearn.metrics.accuracy_score
berechnet nur die Teilmenge Genauigkeit (3) : dh die für eine Stichprobe vorhergesagte Menge von Etiketten muss genau mit der entsprechenden Menge von Etiketten in y_true übereinstimmen.
Diese Art der Genauigkeitsberechnung wird manchmal, vielleicht weniger eindeutig, als genaues Übereinstimmungsverhältnis (1) bezeichnet:
Eine andere typische Methode zur Berechnung der Genauigkeit ist in (1) und (2) definiert und wird weniger eindeutig als Hamming-Punktzahl (4) (da sie in engem Zusammenhang mit dem Hamming-Verlust steht) oder kennzeichnungsbasierte Genauigkeit bezeichnet . Es wird wie folgt berechnet:
Hier ist eine Python-Methode, um die Hamming-Punktzahl zu berechnen:
# Code by /programming//users/1953100/william
# Source: /programming//a/32239764/395857
# License: cc by-sa 3.0 with attribution required
import numpy as np
y_true = np.array([[0,1,0],
[0,1,1],
[1,0,1],
[0,0,1]])
y_pred = np.array([[0,1,1],
[0,1,1],
[0,1,0],
[0,0,0]])
def hamming_score(y_true, y_pred, normalize=True, sample_weight=None):
'''
Compute the Hamming score (a.k.a. label-based accuracy) for the multi-label case
/programming//q/32239577/395857
'''
acc_list = []
for i in range(y_true.shape[0]):
set_true = set( np.where(y_true[i])[0] )
set_pred = set( np.where(y_pred[i])[0] )
#print('\nset_true: {0}'.format(set_true))
#print('set_pred: {0}'.format(set_pred))
tmp_a = None
if len(set_true) == 0 and len(set_pred) == 0:
tmp_a = 1
else:
tmp_a = len(set_true.intersection(set_pred))/\
float( len(set_true.union(set_pred)) )
#print('tmp_a: {0}'.format(tmp_a))
acc_list.append(tmp_a)
return np.mean(acc_list)
if __name__ == "__main__":
print('Hamming score: {0}'.format(hamming_score(y_true, y_pred))) # 0.375 (= (0.5+1+0+0)/4)
# For comparison sake:
import sklearn.metrics
# Subset accuracy
# 0.25 (= 0+1+0+0 / 4) --> 1 if the prediction for one sample fully matches the gold. 0 otherwise.
print('Subset accuracy: {0}'.format(sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)))
# Hamming loss (smaller is better)
# $$ \text{HammingLoss}(x_i, y_i) = \frac{1}{|D|} \sum_{i=1}^{|D|} \frac{xor(x_i, y_i)}{|L|}, $$
# where
# - \\(|D|\\) is the number of samples
# - \\(|L|\\) is the number of labels
# - \\(y_i\\) is the ground truth
# - \\(x_i\\) is the prediction.
# 0.416666666667 (= (1+0+3+1) / (3*4) )
print('Hamming loss: {0}'.format(sklearn.metrics.hamming_loss(y_true, y_pred)))
Ausgänge:
Hamming score: 0.375
Subset accuracy: 0.25
Hamming loss: 0.416666666667
(1) Sorower, Mohammad S. " Eine Literaturübersicht über Algorithmen für Multi-Label-Lernen. " Oregon State University, Corvallis (2010).
(2) Tsoumakas, Grigorios und Ioannis Katakis. " Multi-Label-Klassifizierung: Ein Überblick. " Fakultät für Informatik, Aristoteles-Universität von Thessaloniki, Griechenland (2006).
(3) Ghamrawi, Nadia und Andrew McCallum. " Collective Multi-Label-Klassifizierung ". Vorträge der 14. internationalen ACM-Konferenz zu Informations- und Wissensmanagement. ACM, 2005.
(4) Godbole, Shantanu und Sunita Sarawagi. " Diskriminierende Methoden für die mehrfach gekennzeichnete Klassifizierung. " Fortschritte bei Knowledge Discovery und Data Mining. Springer Berlin Heidelberg, 2004. 22-30.