Микро F1 балл в Scikit-Learn с дисбалансом класса - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть некоторый дисбаланс классов и простой базовый классификатор, который назначает мажоритарный класс для каждой выборки:

from sklearn.metrics import precision_score, recall_score, confusion_matrix

y_true = [0,0,0,1]
y_pred = [0,0,0,0]
confusion_matrix(y_true, y_pred)

Это дает

[[3, 0],

[1, 0]]

Это означает, что TP = 3, FP = 1, FN = 0.

Пока все хорошо.Теперь я хочу вычислить микро-среднюю точность и вспомнить.

precision_score(y_true, y_pred, average='micro') # yields 0.75
recall_score(y_true, y_pred, average='micro') # yields 0.75

Я в порядке с точностью, но почему отзыв не 1,0?Как они могут быть одинаковыми в этом примере, если FP> 0 и FN == 0?Я знаю, что это должно быть связано с микро усреднением, но я не могу обернуться вокруг этого.

1 Ответ

0 голосов
/ 21 ноября 2018

Да, это из-за микро-усреднения.См. документацию здесь , чтобы узнать, как она рассчитывается:

Обратите внимание, что, если включены все метки, «микро» -усреднение в настройке мультикласса даст точность, отзыв и f-баллы, которые все идентичны точности .

Как вы можете видеть на вышеупомянутой связанной странице, и точность, и отзыв определяются как: enter image description here

где R (y, y-hat) равно:

enter image description here

Так что в вашем случае Recall-micro будет рассчитываться как

R = number of correct predictions / total predictions = 3/4 = 0.75
...