¿Por qué scikitlearn dice que la puntuación de F1 está mal definida con FN mayor que 0?

sklearn.metrics un progtwig de python que llama a los métodos de sklearn.metrics para calcular la precisión y la puntuación de F1. Aquí está la salida cuando no hay una muestra predicha:

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

Cuando no hay una muestra predicha, significa que TP + FP es 0, por lo que

  • la precisión (definida como TP / (TP + FP)) es 0/0, no definida,
  • La puntuación F1 (definida como 2TP / (2TP + FP + FN)) es 0 si FN no es cero.

En mi caso, sklearn.metrics también devuelve la precisión como 0.8 y la recuperación como 0. Así que FN no es cero.

¿Pero por qué scikilearn dice que la F1 está mal definida?

¿Cuál es la definición de F1 utilizada por Scikilearn?

Related of "¿Por qué scikitlearn dice que la puntuación de F1 está mal definida con FN mayor que 0?"

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

F1 = 2 * (precisión * recuperación) / (precisión + recuperación)

precisión = TP / (TP + FP) como acaba de decir si el predictor no predice una clase positiva en absoluto: la precisión es 0.

recuperación = TP / (TP + FN), en caso de que si el predictor no predice una clase positiva – TP es 0 – la recuperación es 0.

Así que ahora estás dividiendo 0/0.

Precisión, memoria, puntuación F1 y cálculo de precisión.

 - 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 TP = 5 3 are not FP = 3 * Cats - 12 6 are actually Cats TN = 6 6 are not FN = 6 - Calculation * Precision = TP / (TP + FP) => 5 / (5 + 3) * Recall = TP / D => 5 / 12 * F1 = 2 * (Precision * Recall) / (Precision + Recall) * F1 = 0.5 * Accuracy = TP + TN / P + N * Accuracy = 0.55 

Referencia de Wikipedia