Почему scikitlearn говорит, что оценка F1 плохо определена с FN больше 0?

Я запускаю программу на Python, которая вызывает sklearn.metricsМетоды для вычисления точности и оценки F1. Вот вывод, когда нет предсказанного образца:

/xxx/py2-scikit-learn/0.15.2-comp6/lib/python2.6/site-packages/sklearn/metr\
ics/metrics.py:1771: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)

/xxx/py2-scikit-learn/0.15.2-comp6/lib/python2.6/site-packages/sklearn/metr\
ics/metrics.py:1771: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)

Когда нет прогнозируемой выборки, это означает, что TP+FP равен 0, поэтому

  • точность (определенная как TP/(TP+FP)) равна 0/0, не определена,
  • Оценка F1 (определяется как 2TP/(2TP+FP+FN)) равна 0, если FN не равен нулю.

В моем случае, sklearn.metrics также возвращает точность как 0,8 и возвращает как 0. Таким образом, FN не равен нулю.

Но почему Scikilearn говорит, что F1 плохо определен?

Какое определение F1 используется Scikilearn?

2 ответа

https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/metrics/classification.py

F1 = 2 * (точность * отзыв) / (точность + отзыв)

точность = TP/(TP+FP), как вы только что сказали, если предиктор вообще не предсказывает положительный класс - точность равна 0.

Возврат = TP/(TP+FN), в случае, если предиктор не предсказывает положительный класс - TP равен 0 - отзыв равен 0.

Итак, теперь вы делите 0/0.

Точность, отзыв, оценка F1 и точность

- In a given image of Dogs and Cats

  * Total Dogs - 12  D = 12
  * Total Cats - 8   C = 8

- Computer program predicts

  * Dogs - 8  
    5 are actually Dogs   T.P = 5
    3 are not             F.P = 3    
  * Cats - 12
    6 are actually Cats   T.N = 6 
    6 are not             F.N = 6

- Calculation

  * Precision = T.P / (T.P + F.P) => 5 / (5 + 3)
  * Recall    = T.P / D           => 5 / 12

  * F1 = 2 * (Precision * Recall) / (Precision + Recall)
  * F1 = 0.5

  * Accuracy = T.P + T.N / P + N
  * Accuracy = 0.55

Ссылка на Википедию

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