5

Uruchomiłem klasyfikator losowego lasu dla mojej wielowarstwowej zmiennej wyjściowej z wieloma etykietami. Dostałem poniżej wydajność.Python scikit uczy się metryk wydajności wielu etykiet z wieloma etykietami?

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.]] 

Teraz chcę sprawdzić wydajność mojego klasyfikatora. Znalazłem, że dla multilabelowych multilabeli "Hamming loss lub jaccard_similarity_score" to dobre wskaźniki. Próbowałem to obliczyć, ale dostałem błąd wartości.

Error: 
ValueError: multiclass-multioutput is not supported 

Poniżej linii Próbowałem:

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

Dzięki

+0

To nie powinno być trudne do wdrożenia tego sobie pytanie, czy to nie jest obsługiwana w bibliotece. – Zafi

Odpowiedz

3

Aby obliczyć nieobsługiwany straty Hamminga dla multiclass/wielokategorialnym, można:

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 

Można również uzyskać confusion_matrix dla każdej z dwóch etykiet takich jak:

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]] 

Można również obliczyć precision_score jak tak (lub recall_score w podobny sposób):

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

0.142857142857 
+0

Dzięki. Czy możliwe jest uzyskanie matrycy mylącej dla takiego wyjścia? – niranjan

+0

Tak, zobacz zaktualizowaną odpowiedź. – Stefan

+0

ta składnia nie działa w przypadku wielordzeniowej transmisji wielokrotnej. Otrzymuję błąd ValueError: multilass-multioutput nie jest obsługiwany – niranjan

Powiązane problemy