> For the complete documentation index, see [llms.txt](https://bemind.gitbook.io/neural/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bemind.gitbook.io/neural/instrumenty-ocenki/instrumenty-ocenki-kachestva-obucheniya-klassificiruyushei-neironnoi-seti/matrica-oshibok-confusion-matrix.md).

# Матрица ошибок (Confusion Matrix)

## Матрица ошибок (Confusion Matrix) для оценки качества классификационных моделей

Матрица ошибок (Confusion Matrix) - это таблица, которая используется для визуализации производительности классификационной модели на тестовом наборе данных. Она показывает количество примеров, правильно и неправильно классифицированных моделью для каждого класса. Матрица ошибок - одна из ключевых метрик для оценки качества обучения классифицирующих моделей, особенно в задачах с несбалансированными классами.

### Структура матрицы ошибок

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

Для бинарной классификации (когда есть только два класса, например, "положительный" и "отрицательный") матрица ошибок имеет следующую структуру:

```
                 Предсказанный класс
                Положительный  Отрицательный
Истинный     Положительный   TP       FN
класс        Отрицательный    FP       TN
```

Где:

* TP (True Positives) - количество положительных примеров, классифицированных как положительные
* TN (True Negatives) - количество отрицательных примеров, классифицированных как отрицательные
* FP (False Positives) - количество отрицательных примеров, ошибочно классифицированных как положительные
* FN (False Negatives) - количество положительных примеров, ошибочно классифицированных как отрицательные

### Пример матрицы ошибок

Рассмотрим задачу бинарной классификации на выявление спама в электронных письмах. Предположим, у нас есть тестовый набор из 100 писем, из которых 80 не являются спамом, а 20 - спам. Модель классифицировала эти письма следующим образом:

```
                 Предсказанный класс
                  Не спам  Спам
Истинный     Не спам   75     5
класс        Спам        5     15
```

В этой матрице:

* 75 писем правильно классифицированы как не спам (TN)
* 15 писем спама правильно классифицированы как спам (TP)
* 5 писем, не являющихся спамом, ошибочно классифицированы как спам (FP)
* 5 писем спама ошибочно классифицированы как не спам (FN)

### Использование матрицы ошибок

Анализ матрицы ошибок позволяет получить ценную информацию о производительности классификационной модели:

1. **Главная диагональ** показывает количество примеров, классифицированных правильно.
2. **Остальные элементы** представляют ошибки классификации для каждой комбинации истинного и предсказанного классов.
3. Сумма элементов в каждой строке (или столбце) дает общее количество примеров данного истинного (или предсказанного) класса.

На основе матрицы ошибок можно рассчитать другие важные метрики производительности классификатора, такие как precision, recall и F1-мера для каждого класса.

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

Вот пример кода на Python для построения и анализа матрицы ошибок классификационной модели:

```python
from sklearn.metrics import confusion_matrix
from sklearn.metrics import ConfusionMatrixDisplay
import matplotlib.pyplot as plt

# Истинные метки
true_labels = [0, 1, 0, 1, 0, 1, 0, 0, 1, 1]

# Предсказанные метки
pred_labels = [0, 0, 0, 1, 0, 1, 1, 0, 1, 1]

# Построение матрицы ошибок
cm = confusion_matrix(true_labels, pred_labels)
print("Матрица ошибок:")
print(cm)

# Визуализация матрицы ошибок
cmd = ConfusionMatrixDisplay(cm, display_labels=['Не спам', 'Спам'])
cmd.plot(cmap='Blues')
plt.show()
```

Выход:

```
Матрица ошибок:
[[5 2]
 [1 2]]
```

И отобразится график матрицы ошибок:

<figure><img src="https://1003793957-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyNGqUz7iEjhOGUGQJzfG%2Fuploads%2FNn56thiZabZbVypmucl8%2FConfusion%20Matrix.png?alt=media&amp;token=140aff87-8549-4bcd-81b6-17b428db2681" alt=""><figcaption></figcaption></figure>

Разберем этот пример:

1. Мы импортируем функцию `confusion_matrix` из модуля `sklearn.metrics` для построения матрицы ошибок, а также `ConfusionMatrixDisplay` для визуализации.
2. Создаем списки `true_labels` и `pred_labels` с истинными и предсказанными метками классов соответственно.
3. Вызываем функцию `confusion_matrix`, передавая туда истинные метки `true_labels` и предсказанные метки `pred_labels`. Результат сохраняется в переменную `cm`.
4. Выводим полученную матрицу ошибок `cm`.
5. Создаем объект `ConfusionMatrixDisplay` с матрицей ошибок `cm` и метками классов `['Не спам', 'Спам']`.
6. Вызываем метод `plot` для визуализации матрицы ошибок с цветовой картой `'Blues'`.
7. Вызываем `plt.show()` для отображения графика.

В этом примере мы видим, что из 10 примеров:

* 5 примеров "Не спам" классифицированы правильно (TN)
* 2 примера "Не спам" ошибочно классифицированы как "Спам" (FP)
* 1 пример "Спам" ошибочно классифицирован как "Не спам" (FN)
* 2 примера "Спам" классифицированы правильно (TP)

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