Я знаю, что маркировка матрицы путаницы - это старые новости с несколькими статьями и ответами о переполнении стека о том, как распечатать их в виде тепловых карт или построить с помощью 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» и печатать возвращенную помеченную матрицу. Это будет выглядеть примерно так:
Довольно круто, правда? Если тебе помогло, кидай хлоп или пятьдесят!