Качество классификации и второй проект

Матрица ошибок: TP, FP, TN, FN

Содержание курса

Вызов confusion_matrix с явным labels и соответствие индексов TP, FP, TN, FN

В sklearn матрица ошибок строится одной строкой:

from sklearn.metrics import confusion_matrix

y_true = [0, 0, 1, 1, 0, 1, 0, 1, 1, 0]
y_pred = [0, 1, 1, 0, 0, 1, 0, 1, 0, 0]

cm = confusion_matrix(y_true, y_pred, labels=[0, 1])
print(cm)

Результат:

[[4 1]
 [2 3]]

Функция возвращает NumPy-массив формы (2, 2). Параметр labels=[0, 1] здесь принципиален: он явно фиксирует, какой класс занимает нулевую строку и нулевой столбец, а какой — первую. Без него sklearn определяет порядок по объединению уникальных меток из y_true и y_pred. Обычно это работает предсказуемо, но если в обоих массивах оказался только один класс — например, y_true и y_pred содержат исключительно 0 — матрица схлопнется до 1×1, и чтение по индексам сломается. Явный labels=[0, 1] гарантирует форму 2×2 независимо от того, какие метки реально встретились в данных.

Соответствие индексов фиксировано при labels=[0, 1]:

tn = cm[0, 0]  # истинный 0, предсказан 0
fp = cm[0, 1]  # истинный 0, предсказан 1
fn = cm[1, 0]  # истинный 1, предсказан 0
tp = cm[1, 1]  # истинный 1, предсказан 1

print(tn, fp, fn, tp)     # 4 1 2 3
print(tn + fp + fn + tp)  # 10

Проверка суммы — не формальность. Если число не совпало с len(y_true), значит, где-то ошибка в индексировании или данных.

На этих данных: 5 объектов с истинным классом 0 (строка 0: TN=4, FP=1) и 5 объектов с истинным классом 1 (строка 1: FN=2, TP=3). Итого 4+1+2+3 = 10.

Истинный классПредсказан 0Предсказан 1
0TN = 4FP = 1
1FN = 2TP = 3
Строки — истинные классы, столбцы — предсказанные. Данные совпадают с примером урока.