Погрузитесь в метрики оценки производительности и визуализацию тепловых карт матрицы путаницы с помощью Python

В этой новой статье из серии Интервью о машинном обучении на высшем уровне я начинаю затрагивать другую тему. Вместо описания нового алгоритма машинного обучения я покажу вам, как оценить, хорошо ли работает алгоритм. Умение правильно оценить систему машинного обучения так же важно, как и разработка самой системы.

Я надеюсь, что вы найдете его полезным, когда будете браться за следующее интервью! 😁

Введение

Знание того, как оценить алгоритм машинного обучения, имеет огромное значение. Как мы можем улучшить наш алгоритм, если мы не можем сказать, хорош ли его результат или нет? Есть много метрик, и иногда бывает сложно ориентироваться в них. Возможно, вы слышали такие сокращения, как ROC или AUC, или слышали о Precision и Recall и других показателях. Но что это такое и как их правильно использовать?

Эти различные показатели, которые используются для оценки алгоритма ML, могут быть получены из матрицы путаницы, которая является своего рода «резюме» того, насколько хорошо алгоритм предсказал метки в нашем наборе данных.

В одном из последних интервью, которые я проходил, в частности, в области компьютерного зрения, меня просто попросили объяснить, что такое матрица путаницы и как ее реализовать в практическом упражнении с использованием Python. И поэтому я решил написать эту статью, чтобы поделиться этим опытом с вами.

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

Итак, я хочу поговорить о том, как читать матрицу путаницы и как реализовать ее с помощью нескольких строк кода с помощью Python.

Матрица путаницы

Начнем с самого простого случая. Предположим, вы обучаете любой классификатор: это может быть классификатор, основанный на логистической регрессии, наивном байесовском алгоритме или любом другом алгоритме, который вы хотите.

Классификатор, получивший ввод, просто должен сказать, является ли этот ввод положительным или отрицательным (собака или кошка — одно и то же). Прежде всего, вам нужно вычислить, сколько раз этот классификатор выдавал неверные результаты и в каких точках он угадал правильно.

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

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

Истинно положительный результат (TP): классификатор правильно предсказал положительный результат. Пример: классификатор предсказал, что у пациента опухоль, и это правда!

Истинно отрицательный (TN):классификатор правильно предсказал отрицательный результат. Пример: классификатор предсказал, что у пациента нет опухоли, а на самом деле он здоров.

Ложное срабатывание (FP):также называется ошибка типа 1.Классификатор предсказал положительный результат, но метка для прогнозирования была отрицательной.Пример: классификатор предсказал, что у пациента рак, но на самом деле он здоров.

Ложноотрицательный (FN):Также называется ошибка типа 2.Классификатор предсказал отрицательный результат, но предсказываемая метка была положительной. Пример: классификатор предсказал, что у пациента нет опухоли, хотя она и есть!

Давайте посмотрим на пример того, как рассчитать матрицу путаницы с помощью sklearn в Python.

Следующий набор данных Iris предоставляется sklearn под открытой лицензией, и его можно найти здесь.

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

from sklearn import datasets
import numpy as np
from sklearn.model_selection import train_test_split

iris = datasets.load_iris()

x = iris.data
y = iris.target

x_train, x_test, y_train, y_test = train_test_split(x,y, test_size = 0.3, stratify = y)

Теперь возьмите классификатор, который вы предпочитаете, и обучите его на данных поезда. В этом случае я буду использовать простую логистическую регрессию.

from sklearn.linear_model import LogisticRegression

lr = LogisticRegression()
lr.fit(x_train, y_train)

Что ж, теперь, когда мы обучили наш алгоритм, все, что осталось, — это делать прогнозы относительно тестового набора.

predictions = lr.predict(x_test)

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

from sklearn.metrics import confusion_matrix

cf = confusion_matrix(y_test, predictions)
print(cf)

Вот и все: теперь у вас есть матрица путаницы в вашем распоряжении. Если я могу дать вам еще один совет, на мой взгляд, матрица путаницы, отображаемая таким образом, все еще не очень читабельна. Я часто предпочитаю отображать его как тепловую карту, чтобы иметь яркие цвета, когда число высокое. Таким образом, одним взглядом я могу получить представление о прогрессе моего алгоритма. Для этого я использую библиотеку Seaborn.

import seaborn as sns

sns.heatmap(confusion_matrix(y_test, predictions))

Гораздо лучше я бы сказал! Поскольку большинство сделанных прогнозов верны, мы получили самые светлые цвета по диагонали.

Последние мысли

Знание того, как оценить алгоритм машинного обучения, имеет первостепенное значение. И для того, чтобы сделать это, знание того, как рассчитать и что представляет собой матрица путаницы, безусловно, является первым шагом. Мне часто приходилось отвечать на различные вопросы о матрице путаницы и производных показателях в различных интервью по машинному обучению, которые я проходил. Так что я надеюсь, что вы найдете эту статью полезной, чтобы узнать об этой теме или освежить свою память.😁

Если вам интересны предыдущие статьи из этой серии, я оставляю ссылки здесь:

  1. Собеседование о машинном обучении — часть 1: погружение в линейную, лассо- и гребенчатую регрессию и их предположения
  2. Собеседование по машинному обучению — часть 2: погружение в логистическую регрессию для решения задач классификации с использованием Python
  3. Собеседование о машинном обучении — Часть 3: Погружение в наивный байесовский классификатор с использованием Python
  4. Собеседование по машинному обучению — часть 4: знакомство с машинами опорных векторов с использованием Python
  5. Собеседование по машинному обучению — Часть 5: Знакомство с векторными машинами ядра с использованием Python
  6. Собеседование по машинному обучению — часть 6: погружение в деревья решений с помощью Python
  7. Собеседование по машинному обучению — часть 7: погружение в ансамблевое обучение с классификаторами жесткого голосования с использованием Python
  8. Собеседование о машинном обучении — часть 8: погружение в ансамблевое обучение с помощью AdaBoost с нуля с использованием Python

Конец

Марчелло Полити

Linkedin, Twitter, CV