F1 меньше, чем точность и отзыв в Scikit-learn

Я делаю мультиклассовую классификацию с несбалансированными категориями.

Я заметил, что f1 всегда меньше прямого гармонического среднего значения точности и отзыва, а в некоторых случаях f1 даже меньше, чем точность и отзыв.

К вашему сведению, я позвонил metrics.precision_score(y,pred) по поводу точности и так далее.

Мне известно о разнице среднего микро / макро, и я проверил, что они не микро, используя результаты категории из precision_recall_fscore_support().

Не уверены, что это связано с тем, что используется макро-среднее значение или по другим причинам?


Обновлены подробные результаты, как показано ниже:

n_samples: 75, n_features: 250

МультиномиальныйNB (альфа = 0,01, fit_prior = True)

2-кратное резюме:

1-й прогон:

F1:        0.706029106029
Precision: 0.731531531532
Recall:    0.702702702703

         precision    recall  f1-score   support

      0       0.44      0.67      0.53         6
      1       0.80      0.50      0.62         8
      2       0.78      0.78      0.78        23

avg / total       0.73      0.70      0.71        37

2-й прогон:

F1:        0.787944219523
Precision: 0.841165413534
Recall:    0.815789473684

         precision    recall  f1-score   support

      0       1.00      0.29      0.44         7
      1       0.75      0.86      0.80         7
      2       0.82      0.96      0.88        24

avg / total       0.84      0.82      0.79        38

Общий:

Overall f1-score:   0.74699 (+/- 0.02)
Overall precision:  0.78635 (+/- 0.03)
Overall recall:     0.75925 (+/- 0.03)

Определения микро / макро-усреднения из Scholarpedia:

В классификации с несколькими метками самый простой метод вычисления совокупного балла по категориям - это усреднение баллов по всем бинарным задачам. Полученные в результате оценки называются макро-усредненным отзывом, точностью, F1 и т. Д. Другой способ усреднения - сначала суммировать TP, FP, TN, FN и N по всем категориям, а затем вычислить каждый из вышеуказанных показателей. Полученные результаты называются микро-усредненными. Макро-усреднение придает одинаковый вес каждой категории, и часто в нем преобладает производительность системы по редким категориям (большинству) в степенном распределении. Микро-усреднение придает одинаковый вес каждому документу, и часто во главу угла ставится производительность системы по наиболее распространенным категориям.


Это текущая открытая проблема в Github, № 83.


В следующем примере показано, как микро-, макро- и взвешенное (текущее в Scikit-learn) усреднение могут различаться:

y    = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2]
pred = [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 2, 0, 1, 2, 2, 2, 2]

Матрица путаницы:

[[9 3 0]
 [3 5 1]
 [1 1 4]]

Wei Pre: 0.670655270655
Wei Rec: 0.666666666667
Wei F1 : 0.666801346801
Wei F5 : 0.668625356125

Mic Pre: 0.666666666667
Mic Rec: 0.666666666667
Mic F1 : 0.666666666667
Mic F5 : 0.666666666667

Mac Pre: 0.682621082621
Mac Rec: 0.657407407407
Mac F1 : 0.669777037588
Mac F5 : 0.677424801371

F5 выше является сокращением для F0.5 ...


person Flake    schedule 27.11.2011    source источник
comment
Если мы используем макро-усреднение, это означает, что точность, отзыв и оценка F1 вычисляются для каждого наблюдения, а затем возвращаются средние значения всех значений точности, значений отзыва и значений оценки F1. Таким образом, гармоническое среднее конечной точности и окончательного отзыва определенно не будет равняться окончательному баллу F1.   -  person Antoine    schedule 19.10.2016


Ответы (1)


Не могли бы вы обновить свой вопрос, добавив:

>>> from sklearn.metrics import classification_report
>>> print classification_report(y_true, y_predicted)

Это будет отображать точность и отзывы для каждой отдельной категории вместе с поддержкой и, следовательно, поможет нам понять, как работает усреднение, и решить, является ли это подходящим поведением или нет.

person ogrisel    schedule 27.11.2011
comment
Проверил результаты. Вроде ни микро, ни макро не используются. И странное поведение F1, меньшее, чем точность и отзыв, происходит во втором прогоне, и только что осознавшееся, оно также частично вызвано природой гармонического среднего, где Harmonic (1,00,0,29) = 0,44 противоречит моей прямой интуиции, но это правда. Однако другой причиной может быть и метод немикро / макро. - person Flake; 29.11.2011
comment
Фактическая реализация scikit-learn представляет собой средневзвешенное значение по классам, где веса являются поддержкой (количество образцов в каждом классе). Для меня это звучит как микро-усреднение, но я не проработал детали, так что это может быть совсем не эквивалентным. Если вы хотите внести свой вклад в реальную реализацию микро-усреднения с использованием TP, FP, TN, FN, усредненных по классам, отправьте запрос на включение. - person ogrisel; 29.11.2011
comment
Я разберусь в коде более внимательно и разберусь. :) Я новичок в Python, так что посмотрю, может ли это случиться в будущем. Во всяком случае, я действительно заинтересован и высоко ценю работу ваших ребят в Scikit-learn. - person Flake; 29.11.2011
comment
Обнаружил эту проблему, отслеживая github.com/scikit-learn/scikit-learn/issues/ 83. Я пробовал пример, текущий расчет действительно не является ни макро, ни микро для n ›2. Сложное поведение - это такие вещи, как f1 ‹как точность, так и отзывчивость. - person Flake; 29.11.2011
comment
Я действительно забыл об этой проблеме. Моя память не длится больше пары месяцев. Я полагаю, виноват твиттер, вызванный расстройством внимания ... Так что действительно, пожалуйста, не стесняйтесь подавать запрос на перенос для микро-усреднения (я не думаю, что макро-усреднение так полезно, но его проще реализовать). - person ogrisel; 30.11.2011
comment
Я также отправил электронное письмо в список рассылки об этом. Кажется, это отложено из-за размера файла, потому что я случайно вставил код SE в электронное письмо, которое оказалось изображениями ... Я новичок в Python, но все еще не на том уровне, чтобы вносить качественный код. Но я немного поэкспериментировал, нашел еще одну странную вещь - F1, напомню, точность кажется такой же при микро-усреднении для мультиклассовой классификации. - person Flake; 30.11.2011