Я знаю, что маркировка матрицы путаницы - это старые новости с несколькими статьями и ответами о переполнении стека о том, как распечатать их в виде тепловых карт или построить с помощью matplotlib.

В этой статье мы попробуем сделать что-то без графического построения. Это полезно для нескольких людей, таких как я, которым нужно работать с CLI (или оболочкой) и печатать красивую матрицу путаницы.

Итак, мы стремимся создать что-то вроде этой таблицы из Википедии:

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

Давайте начнем.

Для построения матрицы путаницы мы используем библиотеку tabulate, доступную на PyPi и из этого репозитория: tabulate

Установка:

pip install tabulate

Используй это:

Чтобы использовать ее снова и снова, мы определяем функцию и возвращаем из нее помеченную матрицу.

def get_labeled_confusion_matrix(y_test, y_pred, labels=labels):
  return labeled_confusion_matrix

Затем мы вызываем оригинальный sklearn.metrix.confusion_matrix.

confusion_matrix = metrics.confusion_matrix(y_test, y_pred, labels=labels)

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

confusion_matrix_table = confusion_matrix.tolist()

Довольно просто!

Теперь путаница_матрица готова к загрузке для табулирования, но у нас еще нет меток. Нам нужны заголовки для нашей таблицы, которые будут давать метки для столбцов.

confusion_matrix_header = []
for i in range(len(confusion_matrix_table)):
  confusion_matrix_header.append(f"{labels[i]} (Predicted)")

Для строк мы используем простой трюк, т.е. вставляем метки в 0-ю позицию.

for i in range(len(confusion_matrix_table)):
  confusion_matrix_table[i].insert(0, f"{labels[i]} (Actual)")

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

Теперь все готово и можно скармливать для табулирования

labeled_confusion_matrix = tabulate(confusion_matrix_table,headers=confusion_matrix_header,tablefmt="fancy_grid")

Вот окончательный код:

Теперь вы можете вызывать функцию «get_labeled_confusion_matrix» и печатать возвращенную помеченную матрицу. Это будет выглядеть примерно так:

Довольно круто, правда? Если тебе помогло, кидай хлоп или пятьдесят!