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
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?
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.
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