Матрица ошибок, она же матрица несоответствий или confusion matrix представляет собой матрицу размером 2×2, в ячейках которой находятся параметры оценки качества модели. Такая оценка важна при решении задач классификации и обнаружения объектов. Перейдем от общих слов к делу и:
- Составим матрицу ошибок для игрушечной задачи бинарной классификации
- Напишем код для вычисления матрицы ошибок в scikit-leran
- Узнаем, в каких метриках используются значения из матрицы ошибок
- Напишем код для расчета метрик Recall, Precision и F1-score
Составляем матрицу ошибок!
Предположим, что модель бинарной классификации определяет, присутствуют ли на фото люди. На вход модели были поданы 7 изображений, после небольших преобразований, выходной вектор с предсказаниями для этих 7ми изображений выглядит как y_pred = [1, 0, 0, 1, 0, 1, 1]
. Если y_pred[i] = 1
, значит модель считает, что на i-м фото присутствуют люди, если y_pred[i] = 0
, то модель полагает, что людей на фото нет (0<i<8). Сравним предсказанные моделью значения y_pred с истинными значениями target:
y_pred = [1, 0, 0, 1, 0, 1, 1] target = [1, 1, 0, 0, 0, 1, 1] compare = [true, false, true, false, true, true, true]
Посчитаем, сколько раз модель:
- верно определила категорию 1 (назовем это значение true positive или TP). TP = 3;
- неверно определила категорию 1 (false positive). FP = 1;
- верно определила категорию 0 (true negative). TN=2;
- неверно определила категорию 0 (false negative). FN=1.
Подробнее о подсчете TP и FP:
Условимся называть позитивным значением категорию 1, негативным — категорию 0. Глядя на вектор y_pred мы видим, что модель нашла людей на 4-х изображениях. Однако, при сравнении с вектором target понимаем, что только на трех из них действительно есть люди. Это значит, что в 3-х случаях модель верно определила позитивное значение, и только один раз ошибочно выдала первую категорию. Значит true positive = 3, а false positive = 1. Аналогичным образом подсчитываются TN и FN для нулевой категории.
Используя вычисленные значения true positive, true negative, false positive, false negative, сформируем матрицу несоответствий или confusion matrix:
![Матрица ошибок](https://webtort.ru/wp-content/uploads/2024/06/Confusion_matrix2-3.webp)
Матрица ошибок в коде на Python
Для нахождения матрицы ошибок будем использовать функционал Scikit-learn:
from sklearn.metrics import confusion_matrix
import numpy as np
y_pred = [1, 0, 0, 1, 0, 1, 1]
target = [1, 1, 0, 0, 0, 1, 1]
CM = confusion_matrix(target, y_pred)
CM = np.flip(CM)
print(CM)
Вывод на экран:
[[3 1] [1 2]]
Важно отметить, что функция confusion_matrix() в scikit-learn возвращает матрицу, аналогичную вычисленной нами матрице на рис.1, но в развернутом виде. Поэтому мы дополнительно вызвали метод flip() из библиотеки numpy для инвертирования матрицы к привычному виду.
Матрица ошибок содержит значения, необходимые для вычисления ряда метрик
Значения, хранящиеся в ячейках матрицы ошибок: TP (true positive), FP (false positive), TN (true negative) и FN (false nagative) используются для вычисления метрик:
1. Precision (точность)— показывает долю верных положительных прогнозов для выбранного класса среди всех положительных прогнозов, сделанных моделью. Таким образом, precision демонстрирует способность модели отличать выбранный класс от других классов.
![](https://webtort.ru/wp-content/uploads/2024/06/precision2-1.webp)
2. Recall (полнота) — показывает долю верных положительных прогнозов для выбранного класса среди всех положительных случаев в наборе данных.Таким образом recall демонстрирует способность модели обнаруживать выбранный класс.
![](https://webtort.ru/wp-content/uploads/2024/06/recall2.webp)
3. Рассмотренные выше метрики Precision и Recall лежат в основе вычисления метрики F1-score:
![](https://webtort.ru/wp-content/uploads/2024/06/f1-score.webp)
F1-score принимает значения от 0 до 1. Чем больше верных предсказаний дает модель, тем ближе к единице значение F1-score.
Фанаты BIG DATЫ — наш Телеграм-канал для всех увлеченных изучением Python, Data Science, ML, нейросетями и т.д. Присоединяйтесь, вместе веселее! 😉
Код для нахождения метрик Precision, Recall, F1-score:
from sklearn.metrics import (
precision_score,
recall_score,
f1_score
)
y_pred = [1, 0, 0, 1, 0, 1, 1]
target = [1, 1, 0, 0, 0, 1, 1]
precision = precision_score(target, y_pred)
recall = recall_score(target, y_pred)
f1_score = f1_score(target, y_pred)
print("Точность = ", precision)
print("Полнота = ", recall)
print("f1 score = ", f1_score)
Вывод на экран:
Точность = 0.75 Полнота = 0.75 f1 score = 0.75