F1 меньше, чем точность и отзыв в Scikit-Learn - PullRequest
4 голосов
/ 27 ноября 2011

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

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

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

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

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


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

n_samples: 75, n_features: 250

MultinomialNB (альфа = 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 ...

1 Ответ

2 голосов
/ 27 ноября 2011

Можете ли вы обновить ваш вопрос с выводом:

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

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

...