Accuracy
Метрика качества — это число, по которому оценивают работу модели. Она показывает, насколько хорошо ответы модели совпадают с правильными ответами.
Accuracy — самая простая метрика качества классификации. Она показывает, какая доля объектов была классифицирована правильно.
Чем больше Accuracy, тем точнее модель.
Например, если модель дала 8 правильных ответов из 10, то:
Accuracy = 8 / 10 = 0.8Это означает, что модель правильно ответила в 80% случаев.
Простой пример
Заголовок раздела «Простой пример»uses MLABC;
begin var ytrue := [0, 1, 1, 0, 1]; var ypred := [0, 1, 0, 0, 1];
var acc := Metrics.Accuracy(ytrue, ypred);
Println('Accuracy:', acc);end.В этом примере совпали 4 ответа из 5:
Accuracy: 0.8После TrainTestSplit
Заголовок раздела «После TrainTestSplit»В реальной задаче Accuracy обычно считают на тестовой выборке. Это завершает полный цикл проверки модели:
- данные делят на обучающую и тестовую части;
- модель обучают на
Xtrainиytrain; - модель делает предсказания для
Xtest; - предсказания
ypredсравнивают с правильными ответамиytest; - по числу совпадений вычисляют
Accuracy.
На рисунке ниже показан весь путь: сначала исходные данные разбиваются на обучающую и тестовую части, затем модель обучается на обучающей выборке, после этого делает предсказания для тестовой выборки, и только в конце вычисляется метрика качества.
Последние две операции из этого цикла в программе выглядят так:
var ypred := model.Predict(Xtest);var acc := Metrics.Accuracy(ytest, ypred);Здесь:
ytest— правильные ответы для тестовой выборки;ypred— ответы, которые предсказала модель.
Сначала модель получает признаки тестовой выборки Xtest и возвращает предсказания ypred. Затем Metrics.Accuracy сравнивает ypred с правильными ответами ytest.
На рисунке выше совпали 3 ответа из 4, поэтому Accuracy = 3 / 4 = 0.75.
Полный пример
Заголовок раздела «Полный пример»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 acc := Metrics.Accuracy(ytest, ypred);
Println('Accuracy:', acc);end.Вывод:
Accuracy: 0.75Это значит, что модель правильно классифицировала 75% объектов тестовой выборки: 3 объекта из 4.
Когда Accuracy удобна
Заголовок раздела «Когда Accuracy удобна»Accuracy хорошо подходит как первая оценка качества модели, если классы примерно сбалансированы.
Например, если в тестовой выборке примерно поровну бульдогов и спаниелей, доля правильных ответов хорошо отражает качество модели.
Когда Accuracy может обманывать
Заголовок раздела «Когда Accuracy может обманывать»Если классы сильно несбалансированы, Accuracy может выглядеть хорошо, даже если модель плохо решает задачу.
Например, если 95% писем не являются спамом, модель может всегда отвечать “не спам” и получить Accuracy = 0.95. Но такая модель вообще не умеет находить спам.
В таких случаях вместе с Accuracy смотрят другие метрики:
Precision;Recall;F1;- матрицу ошибок.