python - machine - ¿Por qué scikitlearn dice que el puntaje de F1 está mal definido con FN mayor que 0?
scikit learn install (2)
https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/metrics/classification.py
F1 = 2 * (precisión * recuperación) / (precisión + recuperación)
precision = TP / (TP + FP) como acaba de decir si el predictor no predice ninguna clase positiva en absoluto; la precisión es 0.
recall = TP / (TP + FN), en caso de que el predictor no prediga la clase positiva - TP es 0 - la recuperación es 0.
Entonces ahora estás dividiendo 0/0.
sklearn.metrics
un programa python que llama a los métodos de sklearn.metrics
para calcular la precisión y la puntuación F1. Aquí está el resultado cuando no hay una muestra pronosticada:
/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 pronosticada, significa que TP + FP es 0, entonces
- la precisión (definida como TP / (TP + FP)) es 0/0, no definida,
- El puntaje F1 (definido 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 recuerda como 0. Entonces, 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?
Precisión, Retirada, 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 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
reference Wikipedia