Матрица ошибок
Accuracy показывает одну итоговую цифру: какая доля ответов была правильной. Но иногда этого мало.
Например, модель могла получить неплохую точность, но при этом часто путать один конкретный класс с другим. Чтобы увидеть такие ошибки, используют матрицу ошибок.
Матрица ошибок показывает, как соотносятся правильные ответы и предсказания модели.
- строки — реальные классы;
- столбцы — классы, которые предсказала модель;
- числа внутри таблицы — сколько объектов попало в каждую ситуацию.
Значения на главной диагонали — правильные ответы. Все остальные значения — ошибки.
Простой пример
Заголовок раздела «Простой пример»Пусть модель различает два класса: бульдог и спаниель.
Предсказано →Реально ↓ бульдог спаниельбульдог 2 0спаниель 1 1Такую таблицу читают так:
- 2 бульдога распознаны как бульдоги;
- 1 спаниель распознан как спаниель;
- 1 спаниель ошибочно распознан как бульдог.
Всего правильных ответов 3 из 4, поэтому Accuracy = 0.75.
Создание матрицы
Заголовок раздела «Создание матрицы»В ML PascalABC.NET матрицу ошибок удобно создавать по правильным ответам, предсказаниям и именам классов:
var cm := new ConfusionMatrix(ytest, ypred, target.ClassNames);cm.Println;Здесь:
ytest— правильные ответы для тестовой выборки;ypred— предсказания модели;target.ClassNames— имена классов для понятного вывода.
Полный пример
Заголовок раздела «Полный пример»В этом примере модель учится различать бульдогов и спаниелей по весу и высоте в холке.
uses MLABC;
begin var df := DataFrame.FromCsvText(''' Вес,ВысотаВХолке,Порода 20,33,бульдог 17,43,спаниель 16,41,спаниель 25,36,бульдог 26,34,бульдог 21,35,бульдог 24,35,бульдог 20,36,бульдог 14,39,спаниель 15,40,спаниель 19,39,бульдог 18,42,спаниель 22,34,бульдог 15,38,спаниель 19,40,спаниель 16,40,спаниель ''');
var X := df.ToMatrix(['Вес', 'ВысотаВХолке']); var target := df.EncodeTarget('Порода'); var y := target.Labels;
var (Xtrain, Xtest, ytrain, ytest) := Validation.TrainTestSplit(X, y, testRatio := 0.25, seed := 42);
var model := new KNNClassifier(3); model.Fit(Xtrain, ytrain);
var ypred := model.Predict(Xtest);
var cm := new ConfusionMatrix(ytest, ypred, target.ClassNames); cm.Println;end.Вывод программы:
Предсказано →Реально ↓ бульдог спаниельбульдог 2 0спаниель 1 1По матрице видно, что модель правильно распознала двух бульдогов и одного спаниеля. Один спаниель был ошибочно отнесён к бульдогам.
Зачем смотреть матрицу ошибок
Заголовок раздела «Зачем смотреть матрицу ошибок»Матрица ошибок помогает понять не только сколько ошибок сделала модель, но и какие именно ошибки она делает.
Это особенно важно, если разные ошибки имеют разную цену. Например, в одной задаче может быть важнее не пропустить редкий класс, а в другой — не давать слишком много ложных срабатываний.
Что дальше
Заголовок раздела «Что дальше»На основе матрицы ошибок строятся более подробные метрики классификации:
Precision;Recall;F1.
Они позволяют оценивать качество модели не только в целом, но и по отдельным классам.