Как понять матрицу путаницы 4х4? - PullRequest
2 голосов
/ 27 октября 2019

Я использую Scikit Learn дерево решений для классификации набора данных в одну из четырех категорий. Я новичок в машинном обучении и кодировании в целом, и пытаюсь понять матрицу путаницы.

Поэтому, когда я использую матрицу путаницы в научных наборах, я получаю матрицу четыре на четыре. Мне удалось выяснить, что столбцы - это прогнозы, сделанные для каждой категории (например, «Предсказано A, Предсказано B ...»). Однако я не совсем понимаю, что представляют собой строки. Кроме того, возможно ли, что некоторые прогнозы не попадут в матрицу путаницы. Я считаю, что некоторые столбцы не имеют необходимого количества общего количества. Почему это так?

unique, counts = np.unique(classif_predict, return_counts=True)
print('Predicted:',dict(zip(unique, counts)))

_unique, _counts = np.unique(classif_test, return_counts=True)
print('Tested:',dict(zip(_unique, _counts)))


pd.DataFrame(
    confusion_matrix(classif_test, class_predict), 
    columns = ['AGN Predicted', 'BeXRB Predicted', 'HMXB Predicted', 'SNR Predicted']
)

Мой вывод выглядит так:

Predicted: {'AGN': 7, 'BeXRB': 25, 'HMXB': 7, 'SNR': 2}
Tested: {'AGN': 10, 'BeXRB': 22, 'HMXB': 7, 'SNR': 2}
AGN Predicted       BeXRB Predicted     HMXB Predicted      SNR Predicted             
        3                  3                   4                  0
        2                 13                   6                  1
        0                  3                   4                  0
        0                  2                   0                  0
​```

1 Ответ

0 голосов
/ 27 октября 2019

Матрица путаницы поможет вам определить, какие из классификаций модели были правильными, а какие нет. Размышление об этом только с двумя классами облегчает понимание.

Вот как работает матрица путаницы:

Binary Confusion Matrix

В этой матрице у нас есть только два возможных класса, «НЕТ» и «ДА». Колонки представляют прогнозируемые значения, а строки представляют фактические (истинные) значения. Эта матрица говорит об оценочной модели:

  • Это правильно классифицирует 50 образцов как "НЕТ". (Они называются True Negatives )

  • Это неверно классифицировало 5 образцов как "НЕТ", в то время как те должны были быть "ДА". (Они называются False Negatives )

  • Это неверно классифицировало 10 сэмплов как "ДА", тогда как те должны были быть "НЕТ". (Они называются Ложные срабатывания )

  • Это правильно классифицировано 100 образцов как "ДА". (Они называются True Positives )

Чтобы проверить, сколько прогнозов для каждого класса вы должны суммировать значения в столбцах: эта модель предсказывает 55 "НЕТи 110 ДА.

Чтобы проверить, сколько истинных выборок в каждом классе вы должны суммировать значения в строках: выборки были действительно 60 "НЕТ" и 105 "ДА".

Сумма в обоихчисло дел равно 165, что является общим количеством оцененных выборок.

Специально для вашей задачи:

Когда вы создаете запутанную матрицу 4x4, логика работаетТочно так же, каждый «дополнительный» класс добавляет дополнительную строку и столбец. В ваших выходных данных все в порядке:

Predicted: {'AGN': 7, 'BeXRB': 25, 'HMXB': 7, 'SNR': 2}
Tested: {'AGN': 10, 'BeXRB': 22, 'HMXB': 7, 'SNR': 2}

Предполагается, что "Tested" является вашим истинным значением:

  • это означает, что у вас было 10 "AGN" выборок, но ваша модельтолько 7 из них (очевидно, только 3 правильно).
  • У вас также было 22 образца «BeXRB», и ваша модель была классифицирована как «BeXRB» 25 (очевидно, только 13 правильно).

РЕДАКТИРОВАТЬ:

Значения в вашей матрице не совпадают со значениями в вашем PREDICTED выводе (dict), как вы можете проверить: (я добавил столбец и строку SUM)

             Pred AGN      Pred BeXRB          Pred HMXB        Pred SNR        SUM
AGN True        3                 3               4                 0            10
BeXRB True      2                13               6                 1            22
HMXB True       0                 3               4                 0            7
SNR True        0                 2               0                 0            2

SUM:            5                21              14                 1

С количеством предоставленной вами информации я не могу вам помочь в дальнейшем, но вы должны проверить массив classif_predict.

Если вы используете Jupyter Notebook, запуск ячеек в другом порядке может спровоцировать такой видповедение, из-за изменения значений переменных. Если это так, попробуйте запустить все снова в ожидаемом порядке.

...