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

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

При оценке классификаторов мне часто приходилось искать в StackOverflow или справочниках API для конкретного синтаксиса, связанного с построением и маркировкой матрицы путаницы, тратя время на поиск таких вопросов, как «Как построить матрицу путаницы с метками?», «Как построить с разными цветными картами? ” или «Как добавить необработанные числа к графикам матрицы путаницы?». Итак, здесь я представляю исчерпывающее руководство по построению различных стилей матриц путаницы.

Быстрый и простой способ

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

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

С помощью этих 5–10 строк кода вы можете получить красивое визуальное представление матрицы путаницы вместо уродливой таблицы с необработанными числами.

Однако есть проблема с этой матрицей путаницы. Матрица не очень информативна для меток 1 и 2 из-за сильного перекоса в распределении в сторону более поздних классов. В таких случаях, когда наблюдается значительный перекос в распределении классов, часто бывает полезно нормализовать матрицу неточностей. Для этого мы суммируем по строкам и делим каждый элемент на сумму его строки, то есть делим каждую запись строки на количество экземпляров, где истинной меткой является эта строка.

conf_mat_norm = conf_mat.astype('float') / conf_mat.sum(axis=1)[:, np.newaxis]

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

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

Создание полностью настраиваемой матрицы путаницы

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

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

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

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