Разница между balance_accuracy_score и accuracy_score

Я используюbalance_accuracy_score и precision_score в sklearn.metrics.

Согласно документации, эти две метрики одинаковы, но в моем коде первая дает мне 96%, а вторая — 97%, а точность обучения — 98%.

Можете ли вы объяснить мне, в чем разница между тремя значениями точности и как рассчитывается каждое из них?

Примечание: проблема представляет собой проблему множественной классификации с тремя классами.

Я прикрепил образцы кода.

точность 98%

model.compile(loss='categorical_crossentropy',
              optimizer=Adam(lr=0.00001),
              metrics=['accuracy'])

точность 96%

from sklearn.metrics import balanced_accuracy_score
balanced_accuracy_score(all_labels, all_predications)

точность 97%

from sklearn.metrics import accuracy_score
accuracy_score(all_labels, all_predications)

Вы забыли поделиться своим кодом, чтобы было проще воспроизвести вашу проблему.

Nico Haase 06.04.2019 13:48

Я добавил образцы кода

s.ali 06.04.2019 14:55
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
2
6 763
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Насколько я понимаю проблему (не зная, на чем выполняются all_labels, all_predictions), разница в ваших прогнозах вне выборки между balanced_accuracy_score и accuracy_score вызвана балансировкой первой функции.

accuracy_score просто возвращает процент меток, которые вы предсказали правильно (т. е. есть 1000 меток, вы правильно предсказали 980, т. е. вы получили оценку 98%).

Однако balanced_accuracy_score работает по-другому, поскольку возвращает среднюю точность для каждого класса, что является другой метрикой. Скажем, ваши 1000 меток относятся к 2 классам с 750 наблюдениями в классе 1 и 250 в классе 2. Если вы пропустите 10 в каждом классе, вы получите точность 740/750 = 98,7% в классе 1 и 240/250 = 96. % в классе 2. Тогда balanced_accuracy_score вернет (98,7% + 96%)/2 = 97,35%. Поэтому я считаю, что программа работает так, как ожидалось, основываясь на документации.

Как ни странно, в документации balanced_accuracy_score говорится, что это среднее значение отзывать, что, я думаю, должно быть ошибкой.

Michael 30.11.2019 11:52

Я думаю, это зависит от вашего определения припоминания. В онлайн-руководстве Sklearn они цитируют Mosley (2013) (lib.dr.iastate.edu/etd/13537), и, учитывая данное автором определение отзыва, расчет balanced_accuracy_score кажется точным. Опять же, вы можете использовать другие правила взвешивания, чем просто разделить сумму отзывов для каждого класса на количество всех классов.

seulberg1 01.12.2019 19:49

Точность = tp+tn/(tp+tn+fp+fn) не подходит для несбалансированных классов.

Поэтому мы можем использовать Balanced Accuracy = TPR+TNR/2.

TPR = доля истинно положительных результатов = tp/(tp+fn): также называется «чувствительностью».

TNR = истинный отрицательный показатель = tn/(tn+fp): также называется «специфичностью».

Balanced Accuracy дает почти те же результаты, что и ROC AUC Score.

Ссылки:

1 https://en.wikipedia.org/wiki/Precision_and_recall

2 https://scikit-learn.org/stable/modules/generated/sklearn.metrics.balanced_accuracy_score.html#sklearn.metrics.balanced_accuracy_score

3 https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html

Я не верю, что сбалансированная точность «почти такая же», как AUC. По моим данным, AUC составляет 0,75, но сбалансированная точность составляет всего 0,54.

iggy 14.07.2021 07:03

Другие вопросы по теме