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

Давайте посмотрим, как интерпретировать матрицу путаницы и как матрица путаницы может быть реализована в Scikit-learn для Python.

Что такое матрица путаницы?

Возможно, вам интересно: что такое «матрица путаницы»?

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

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

Определение необходимых терминов

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

Классификация машинного обучения

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

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

Верно/ложноположительно/отрицательно

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

На рисунке ниже у нас есть набор данных с предварительно выбранными метками «Положительный» (светло-зеленый) и «Отрицательный» (светло-красный). Поскольку примеры в квадратной области основаны на фактах, мы называем их «фактами». С другой стороны, мы пытаемся изучить модель классификации «Факта», предсказывая метку «Факта» по его признакам. Давайте определим «выборку» как наши прогнозы, которые мы предсказываем как положительные метки, представленные в виде круга внутри квадрата. Очевидно, что область за пределами круга — это предсказания, которым мы предсказываем отрицательные метки.

True/False используется для описания наших прогнозов с помощью «факта». Если предсказание соответствует метке, выбранной в «Факте», оно будет верным, иначе — ложным.

Давайте внимательно посмотрим на область (1) на рисунке 1. Поскольку эта область была положительной в «Факте», но мы предсказали ее отрицательной, поэтому получили ложный прогноз. Таким образом, это ложноотрицательный результат (Ложно означает, что мы были неправы, Отрицательный исходит из наших прогнозов).

Точно так же область (2) является отрицательной в «факте», а также отрицательной в наших предсказаниях, что делает ее истинно отрицательной. Точно так же область (3) является истинно положительным, а область (4) - ложноположительным.

Вспомнить

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

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

Точность

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

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

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

Точность отвечает на вопрос: какой процент всех выбранных положительных примеров является действительно положительным?

Вспомнить отвечает на этот вопрос: какой процент от всех положительных примеров в вашем наборе данных определила ваша модель?

Конкретность

Если чувствительность/отзыв связана с истинно положительным уровнем, то специфичность связана с отслеживанием истинно отрицательного уровня.

Специфичность — это количество действительно отрицательных примеров, выявленных вашей моделью, деленное на общее количество отрицательных примеров в наборе данных. Он математически определяется соотношением истинно отрицательных примеров к истинно отрицательным и ложноположительным примерам.

Точность

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

Понимание матрицы путаницы

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

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

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

В левой части матрицы путаницы отображается класс, предсказанный классификатором. Между тем, в верхней строке матрицы хранятся фактические метки классов примеров.

Прогноз\Факт Положительный Отрицательный Положительный Истинно положительный Ложноположительный Отрицательный Ложноотрицательный Истинно отрицательный

Вы можете посмотреть, где значения пересекаются, чтобы увидеть, как работает сеть. Количество правильных положительных прогнозов (True Positives) находится в верхнем левом углу.

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

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

Просто чтобы сделать это более явным:

Вверху слева: истинно положительные результаты
Вверху справа: ложноположительные результаты
Внизу слева: ложноотрицательные результаты
Внизу справа: истинно отрицательные результаты

Если классов больше двух, матрица просто увеличивается на соответствующее количество классов. Например, если есть четыре класса, это будет матрица 4 x 4.

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

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

Например,

Хотя такие показатели, как точность и полнота, можно рассчитать вручную, эти значения настолько распространены в прогнозном анализе, что большинство библиотек машинного обучения, таких как Scikit-learn для Python, имеют встроенные методы для получения этих показателей.

Создание матрицы путаницы в Scikit Learn

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

В этом примере будет рассмотрена реализация матрицы путаницы в Scikit-learn (Sklearn). Наблюдение за тем, как на практике генерируются матрицы путаницы, поможет вам понять их предполагаемое использование.

Для начала нам нужно выбрать набор данных для анализа. В этом примере мы будем использовать набор данных digits.

Набор данных digits представляет собой набор рукописных чисел, и наш классификатор попытается предсказать, какое число находится в данном примере. Он поставляется предварительно упакованным в Scikit-learn, и из-за того, что набор данных так хорошо поддерживается, требуется очень небольшая предварительная обработка данных.

Начнем с импорта необходимых модулей в Python. Мы будем использовать Scikit-learn, как упоминалось ранее.

Нам понадобится классификатор логистической регрессии, инструмент разделение обучения/тестирования и метрика матрицы путаницы от Sklearn. Мы также будем использовать Numpy и Matplotlib.

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

импортировать numpy как np
импортировать matplotlib.pyplot как plt
из sklearn.metrics импортировать путаницу_матрицу
из sklearn.linear_model импортировать LogisticRegression
из sklearn.model_selection импортировать train_test_split

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

из sklearn.datasets импортировать load_digits

цифры = load_digits()

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

plt.figure(figsize=(20,4))

для индекса (изображение, метка) в enumerate(zip(digits.data[0:5], digits.target[0:5])):

plt.subplot(1, 5, индекс + 1)

plt.imshow (np.reshape (изображение, (8,8)), cmap = plt.cm.gray)

plt.title(‘Обучение: %i\n’ % метка, размер шрифта = 20)

Теперь нам нужно разделить наши данные на обучающий набор и тестовую площадку, а также функции и метки. «X» — это функции, а «Y» — метки.

X_train, X_test, y_train, y_test = train_test_split (digits.data, digits.target, test_size = 0,25, random_state = 0)

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

logreg_clf = Логистическая регрессия ()

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

logreg_clf.fit(X_train, y_train)

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

# Как предсказать один пример

logreg_clf.predict(X_test[0].reshape(1,-1))

# Как предсказать несколько примеров, разрезая набор данных

logreg_clf.predict(X_test[0:10])

Теперь сделаем прогнозы из всего набора тестовых данных, минуя его переменную «X_test». Мы также будем хранить прогнозы в переменной под названием «прогнозы», чтобы мы могли получить к ним доступ при оценке производительности классификатора.

прогнозы = logreg_clf.predict(X_test)

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

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

оценка = logreg_clf.score (X_test, y_test)

печать (оценка)

c_matrix = путаница_matrx (y_test, прогнозы)

печать (c_matrix)

Вот как вы создаете матрицу путаницы в Sklearn. Существуют и другие способы создания матрицы путаницы в Python, например, с помощью библиотеки Seaborn, но это один из самых простых способов сделать это.

Заключение

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

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

Начинается голосование сообщества Vietnam AI Grand Challenge!

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

Проект Vietnam AI Grand Challenge, проводимый в сотрудничестве с правительством Вьетнама, компаниями McKinsey & Company и VietAI, объединяет лучшие таланты страны в области ИИ для разработки Ultimate AI Virtual Assistant. Секторы дизайна включают беспилотные автомобили, производство, банковское дело, гостиничные услуги и многое другое. Всего зарегистрировалось 187 команд с более чем 700 участниками!

Общественное голосование открыто. Мы приглашаем вас принять участие в определении исхода конкурса и поддержать все замечательные команды. Две команды, набравшие наибольшее количество голосов сообщества и набравшие не менее 200 голосов, получат бесплатные авиабилеты и проживание для участия в Гранд-финале в Ханое 15 августа в рамках программы AI4VN.

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

Проголосуйте сейчас!



Первоначально опубликовано на Kambria.