5

Ich habe Random Forest-Klassifikator für meine Multi-Klassen-Multi-Label-Ausgabe-Variable ausgeführt. Ich habe die Ausgabe erreicht.Python scikit lernen Multi-Label Multi-Label-Performance-Metriken?

My y_test values 


    Degree Nature 
762721  1  7        
548912  0  6 
727126  1  12 
14880  1  12 
189505  1  12 
657486  1  12 
461004  1  0 
31548  0  6 
296674  1  7 
121330  0  17 


predicted output : 

[[ 1. 7.] 
[ 0. 6.] 
[ 1. 12.] 
[ 1. 12.] 
[ 1. 12.] 
[ 1. 12.] 
[ 1. 0.] 
[ 0. 6.] 
[ 1. 7.] 
[ 0. 17.]] 

Jetzt möchte ich die Leistung meines Klassifikator überprüfen. Ich habe festgestellt, dass für Multiklass Multilabel "Hamming Verlust oder jaccard_similarity_score" die guten Metriken ist. Ich habe versucht, es zu berechnen, aber ich bekam Wert Fehler.

Error: 
ValueError: multiclass-multioutput is not supported 

Unten Linie Ich versuchte:

print hamming_loss(y_test, RF_predicted) 
print jaccard_similarity_score(y_test, RF_predicted) 

Danke,

+0

Es sollte nicht so schwer sein, dies selbst zu implementieren, wenn es in der Bibliothek nicht unterstützt wird. – Zafi

Antwort

3

Um mehrklassige/Multilabel des nicht unterstützten Hamming-Verlust zu berechnen, könnten Sie:

import numpy as np 
y_true = np.array([[1, 1], [2, 3]]) 
y_pred = np.array([[0, 1], [1, 2]]) 
np.sum(np.not_equal(y_true, y_pred))/float(y_true.size) 

0.75 

können Sie auch bekommen die confusion_matrix für jede der beiden Etiketten wie folgt:

from sklearn.metrics import confusion_matrix, precision_score 
np.random.seed(42) 

y_true = np.vstack((np.random.randint(0, 2, 10), np.random.randint(2, 5, 10))).T 

[[0 4] 
[1 4] 
[0 4] 
[0 4] 
[0 2] 
[1 4] 
[0 3] 
[0 2] 
[0 3] 
[1 3]] 

y_pred = np.vstack((np.random.randint(0, 2, 10), np.random.randint(2, 5, 10))).T 

[[1 2] 
[1 2] 
[1 4] 
[1 4] 
[0 4] 
[0 3] 
[1 4] 
[1 3] 
[1 3] 
[0 4]] 

confusion_matrix(y_true[:, 0], y_pred[:, 0]) 

[[1 6] 
[2 1]] 

confusion_matrix(y_true[:, 1], y_pred[:, 1]) 

[[0 1 1] 
[0 1 2] 
[2 1 2]] 

könnten Sie auch die precision_score wie so (oder die recall_score in einer ähnlichen Art und Weise) berechnen:

precision_score(y_true[:, 0], y_pred[:, 0]) 

0.142857142857 
+0

Danke. Ist es möglich, eine Konfusionsmatrix für eine solche Ausgabe zu erhalten? – niranjan

+0

Ja, siehe aktualisierte Antwort. – Stefan

+0

Diese Syntax funktioniert nicht für Multiclass-Multi-Output. Ich erhalte einen Fehler ValueError: Multiclass-Multioutput wird nicht unterstützt – niranjan