Показатели эффективности для точности и отзыва в мультиклассовой классификации могут немного - или очень - сбивать с толку, поэтому в этом посте я объясню, как используются точность и отзыв и как они рассчитываются. На самом деле все очень просто! Но сначала давайте начнем с краткого обзора точности и отзывчивости бинарной классификации. (Есть еще Часть II: оценка F1, но я рекомендую вам начать с части I).

В бинарной классификации у нас обычно есть два класса, часто называемые положительным и отрицательным, и мы пытаемся предсказать класс для каждой выборки. Давайте посмотрим на простой пример: наши данные - это набор изображений, на некоторых из которых есть собака. Мы заинтересованы в обнаружении фотографий с собаками. В этом случае наш класс Positive - это класс всех фотографий собак, а класс Negative включает все остальные фотографии. Другими словами, если образец фотографии содержит собаку, это положительно. Если это не так, это отрицательно. Наш классификатор предсказывает для каждой фотографии, положительный (P) или отрицательный (N): есть ли на фотографии собака?

Учитывая классификатор, я считаю, что лучший способ подумать о производительности классификатора - это использовать так называемую «матрицу путаницы». Для бинарной классификации матрица путаницы имеет две строки и два столбца и показывает, сколько положительных образцов было предсказано как положительное или отрицательное (первый столбец), и сколько отрицательных фотографий было предсказано как положительное или отрицательное (второй столбец). Таким образом, у него всего 4 ячейки. Каждый раз, когда наш классификатор делает прогноз, одна из ячеек в таблице увеличивается на единицу. К концу процесса мы можем точно увидеть, как работает наш классификатор (конечно, мы можем сделать это только в том случае, если наши тестовые данные помечены).

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

Наш идеальный классификатор не ошибся. Все положительные фотографии были классифицированы как положительные, а все отрицательные фотографии - как отрицательные.

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

В этом примере 2 фотографии с собаками были классифицированы как отрицательные (без собаки!), А 1 фотография без собаки была классифицирована как положительная (собака!).

Когда положительный образец ложно классифицируется как отрицательный, мы называем это ложноотрицательным (FN). Точно так же, когда отрицательный образец ложно классифицируется как положительный, он называется ложноположительным. Ниже мы воспроизводим матрицу путаницы, но добавляем TP, FP, FN и TN для обозначения истинно положительных, ложных, ложно отрицательных и истинно отрицательных значений:

Теперь, когда мы разобрались с матрицей путаницы и различными числами, мы можем приступить к изучению показателей производительности: насколько хорош наш классификатор? (В глубине души нам всегда нужно помнить, что «хорошо» может означать разные вещи, в зависимости от реальной реальной проблемы, которую нам нужно решить.)

Начнем с точности, которая отвечает на следующий вопрос: какая доля предсказанных положительных результатов действительно положительна? Нам нужно посмотреть на общее количество прогнозируемых положительных результатов (истинные положительные плюс ложные положительные результаты, TP + FP) и посмотреть, сколько из них являются истинно положительными (TP). В нашем случае 5 + 1 = 6 фотографий были предсказаны как положительные, но только 5 из них являются истинно положительными. Таким образом, точность в нашем случае составляет 5 / (5 + 1) = 83,3%. Как правило, точность равна TP / (TP + FP). Обратите внимание, что TP + FP - это сумма первой строки.

Другой очень полезный показатель - это отзыв, который отвечает на другой вопрос: какая доля фактических положительных результатов классифицируется правильно? Глядя на таблицу, мы видим, что количество реальных положительных результатов составляет 2 + 5 = 7 (TP + FN). Из этих 7 фотографий 5 были оценены как положительные. Таким образом, отзыв составляет 5/7 = 71,4%. В общем, отзыв - это TP / (TP + FN). Обратите внимание, что TP + FN - это сумма первого столбца.

Также может быть интересна точность: какая доля фотографий - как положительных, так и отрицательных - была правильно классифицирована? В нашем случае правильно классифицировано 5 + 2 = 7 фотографий из 10. Таким образом, точность составляет 70,0%. Вообще говоря, из фотографий TP + TN + FP + FN есть в общей сложности правильно классифицированные фотографии TP + TN, поэтому общая формула точности такова: (TP + TN) / (TP + TN + FP + FN).

Что важнее, точность или отзыв? Это действительно зависит от вашей конкретной проблемы классификации. Представьте, например, что вашему классификатору необходимо выявлять диабет у людей. «Положительный» означает, что у пациента диабет. «Отрицательный» означает, что пациент здоров. (Я знаю, это сбивает с толку. Но это медицинский жаргон!). В этом случае вы, вероятно, захотите убедиться, что ваш классификатор имеет высокую степень запоминания, чтобы правильно выявлять как можно больше диабетиков. Возьмем другой пример - предположим, вы создаете систему рекомендаций по видео, и ваш классификатор предсказывает положительный результат для релевантного видео и отрицательный для нерелевантного видео. Вы хотите убедиться, что почти все рекомендуемые видео актуальны для пользователя, поэтому вам нужна высокая точность. Жизнь полна компромиссов, и то же самое можно сказать и о классификаторах. Обычно существует компромисс между хорошей точностью и хорошим отзывом. Обычно не бывает и того, и другого.

Наш пример с собакой был проблемой бинарной классификации. Проблемы двоичной классификации часто сосредоточены на классе Positive, который мы хотим обнаружить. Напротив, в типичной задаче классификации на несколько классов нам необходимо разделить каждую выборку на 1 из N различных классов. Возвращаясь к нашему примеру с фотографиями, представьте, что теперь у нас есть коллекция фотографий. На каждой фотографии изображено одно животное: кошка, рыба или курица. Наш классификатор должен предсказать, какое животное изображено на каждой фотографии. Это проблема классификации с N = 3 классами.

Давайте посмотрим на образец матрицы путаницы, который создается после классификации 25 фотографий:

Подобно нашему двоичному случаю, мы можем определить точность и отзыв для каждого из классов. Например, точность для класса Cat - это количество правильно спрогнозированных фотографий кошек (4) из всех прогнозируемых фотографий кошек (4 + 3 + 6 = 13), что составляет 4/13 = 30,8%. Таким образом, только около 1/3 фотографий, которые наш предсказатель классифицирует как Cat, на самом деле являются кошками!

С другой стороны, отзыв для Cat - это количество правильно спрогнозированных фотографий кошек (4) из числа реальных фотографий кошек (4 + 1 + 1 = 6), что составляет 4/6. = 66,7%. Это означает, что наш классификатор отнес 2/3 фотографий кошек к категории Cat.

Аналогичным образом мы можем вычислить точность и отзыв для двух других классов: Fish и Hen. Для рыбы эти цифры составляют 66,7% и 20,0% соответственно. Для Хен показатель точности и отзывчивости составляет 66,7%. Идите и проверьте эти результаты. Вы можете использовать два изображения ниже, чтобы помочь вам.

В библиотеке Python scikit-learn (также известной как sklearn) вы можете легко вычислить точность и отзыв для каждого класса в мультиклассовом классификаторе. Здесь удобная функция sklearn.metrics.classification_report.

Вот код, который использует наш пример Cat / Fish / Hen. Сначала я создал список с истинными классами изображений (y_true) и предсказанными классами (y_pred). Обычно y_pred генерируется с использованием классификатора - здесь я устанавливаю его значения вручную, чтобы они соответствовали матрице путаницы.

В строке 14 печатается матрица неточностей, а затем в строке 17 печатаются точность и отзыв для трех классов.

И вот результат. Обратите внимание, что матрица путаницы здесь транспонирована - именно так работает sklearn. Обратите внимание на столбец поддержка: в нем указано количество образцов для каждого класса (6 для кошек, 10 для рыб и т. Д.).

Отчет_классификации также сообщает другие показатели (например, показатель F1). В следующем посте я объясню F1-score для мультиклассового кейса и почему его НЕ СЛЕДУЕТ использовать :)

Надеюсь, вы нашли этот пост полезным и легким для понимания!

Продолжить Часть II: F1-Score