Я использую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)
Я добавил образцы кода






Насколько я понимаю проблему (не зная, на чем выполняются 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 говорится, что это среднее значение отзывать, что, я думаю, должно быть ошибкой.
Я думаю, это зависит от вашего определения припоминания. В онлайн-руководстве Sklearn они цитируют Mosley (2013) (lib.dr.iastate.edu/etd/13537), и, учитывая данное автором определение отзыва, расчет balanced_accuracy_score кажется точным. Опять же, вы можете использовать другие правила взвешивания, чем просто разделить сумму отзывов для каждого класса на количество всех классов.
Точность = 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
3 https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html
Я не верю, что сбалансированная точность «почти такая же», как AUC. По моим данным, AUC составляет 0,75, но сбалансированная точность составляет всего 0,54.
Вы забыли поделиться своим кодом, чтобы было проще воспроизвести вашу проблему.