Python scikit изучает мультиклассовые метрики производительности с несколькими метками?

Я запустил классификатор случайного леса для моей выходной переменной с несколькими классами и несколькими метками. Я получил результат ниже.

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

Теперь я хочу проверить работоспособность своего классификатора. Я обнаружил, что для мультикласса с несколькими метками "потеря Хэмминга или jaccard_similarity_score" являются хорошими показателями. Я пытался рассчитать это, но получал ошибку значения.

Error:
ValueError: multiclass-multioutput is not supported

Ниже я пробовал:

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

Спасибо,


person niranjan    schedule 01.08.2016    source источник
comment
Это не должно быть так сложно реализовать самостоятельно, если это не поддерживается в библиотеке.   -  person Zafi    schedule 01.08.2016


Ответы (1)


Чтобы рассчитать неподдерживаемые потери хэмминга для мультикласса / мультиэтикетки, вы можете:

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

Вы также можете получить confusion_matrix для каждой из двух меток следующим образом:

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

Вы также можете вычислить precision_score (или recall_score аналогичным образом):

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

0.142857142857
person Stefan    schedule 01.08.2016
comment
Спасибо. Можно ли получить матрицу путаницы для такого вывода. - person niranjan; 02.08.2016
comment
этот синтаксис не работает для нескольких классов. Я получаю сообщение об ошибке ValueError: multiclass-multioutput не поддерживается - person niranjan; 03.08.2016
comment
Я обновил ответ, чтобы показать, как можно получить матрицу путаницы для каждой из двух меток. Ни один из sklear.metrics в настоящее время не поддерживает стандартную классификацию нескольких выходов и нескольких классов. - person Stefan; 03.08.2016
comment
Спасибо, это полезно - person niranjan; 04.08.2016
comment
Пожалуйста, дайте мне знать, если это не ответ на ваш вопрос и вам нужна дополнительная информация. - person Stefan; 04.08.2016
comment
Я получил этот результат, когда запустил ваш код. Я не знаю, как интерпретировать этот результат. Как узнать точность и отзыв для каждого класса - person niranjan; 05.08.2016
comment
Первая метка [[1 0] [0 1]] вторая метка [[1 0] [0 1]] - person niranjan; 05.08.2016
comment
Я добавил пример того, как вычислить recall_score для первой метки. - person Stefan; 05.08.2016
comment
Не стесняйтесь принять мой ответ, если ваш вопрос был задан. - person Stefan; 08.08.2016