web-dev-qa-db-fra.com

pourquoi scikitlearn dit-il que le score F1 est mal défini avec un FN supérieur à 0?

J'exécute un programme python qui appelle les méthodes de sklearn.metrics Pour calculer la précision et le score F1. Voici le résultat lorsqu'il n'y a pas d'échantillon prédit:

/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)

Lorsqu'il n'y a pas d'échantillon prévu, cela signifie que TP + FP est égal à 0, donc

  • la précision (définie comme TP/(TP + FP)) est 0/0, non définie,
  • Le score F1 (défini comme 2TP/(2TP + FP + FN)) est égal à 0 si FN n'est pas nul.

Dans mon cas, sklearn.metrics Renvoie également la précision en tant que 0,8 et la rappelle en tant que 0. Donc, FN n'est pas nul.

Mais pourquoi scikilearn dit-il que la F1 est mal définie?

Quelle est la définition de F1 utilisée par Scikilearn?

46
Tim

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

F1 = 2 * (précision * rappel)/(précision + rappel)

precision = TP/(TP + FP) comme vous venez de le dire si le prédicteur ne prédit pas du tout la classe positive - la précision est égale à 0.

rappel = TP/(TP + FN), si le prédicteur ne prédit pas la classe positive - TP est 0 - rappel est 0.

Alors maintenant, vous divisez 0/0.

48
Ibraim Ganiev

Précision, Rappel, Score F1 et Calcul de la précision

- 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

Wikipedia référence

19
Wazy