Какая метка класса считается отрицательной в sklearn.metrics.confusion_matrix? - PullRequest
0 голосов
/ 12 декабря 2018

Я знаю, что мы можем использовать список для указания порядка:

tn, fp, fn, tp = confusion_matrix([0, 1, 0, 1], [1, 1, 1, 0], labels=[0,1]).ravel()

, но значение элементов матрицы зависит от двух предположений:

  1. Будь строкиили столбцы считаются фактическими (или прогнозируемыми) метками.
  2. Предполагается, что 0 или 1 является ПОЛОЖИТЕЛЬНЫМ (или НЕГАТИВНЫМ) классом.и ни один из них прямо не упомянут в строке документации .

Этот вопрос уже задавался здесь , но я думаю, что здесь я спрашиваюо корне путаницы, а не путаницы в ее общем смысле.Вопрос не в том, как интерпретировать путаницу-матрицу, а в том, как определить определенный класс как положительный или отрицательный.

1 Ответ

0 голосов
/ 12 декабря 2018

Краткий ответ В двоичной классификации при использовании аргумента labels,

confusion_matrix([0, 1, 0, 1], [1, 1, 1, 0], labels=[0,1]).ravel()

метки классов 0 и 1 рассматриваются как Negative и Positive соответственно.Это связано с порядком, подразумеваемым списком, а не с алфавитно-цифровым порядком.


Проверка: Рассмотрим метки класса дисбаланса, например: (используя класс дисбаланса дляразличие легче)

>>> y_true = [0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0]
>>> y_pred = [0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0]
>>> table = confusion_matrix(y_true, y_pred, labeels=[0,1]).reval()

это даст вам таблицу путаницы следующим образом:

>>> table
array([12,  1,  2,  1])

, что соответствует:

              Actual
        |   1   |   0  |
     ___________________
pred  1 |  TP=1 | FP=1 |
      0 |  FN=2 | TN=12|

, где FN=2 означаетчто в двух случаях модель прогнозировала выборку как отрицательную (т. е. 0), но фактическая метка была положительной (т. е. 1), следовательно, ложное отрицание равно 2.

Аналогично для TN=12, в 12 случаях модель правильно предсказала отрицательный класс (0), следовательно, True Negative равен 12.

Таким образом, все складывается в предположении, что sklearn считает первую метку (в labels=[0,1])как отрицательный класс. Поэтому здесь 0, первая метка, представляет отрицательный класс.

...