Quelles sont les valeurs correctes de précision et de rappel lorsque les dénominateurs sont égaux à 0?

16

La précision est définie comme:

p = vrais positifs / (vrais positifs + faux positifs)

Quelle est la valeur de la précision si (vrais positifs + faux positifs) = 0? Est-ce juste indéfini?

Même question pour rappel:

r = vrais positifs / (vrais positifs + faux négatifs)

Dans ce cas, quelle est la valeur de rappel si (vrais positifs + faux négatifs) = 0?

PS Cette question est très similaire à la question Quelles sont les valeurs correctes pour la précision et le rappel dans les cas de bord? .

Raffi Khatchadourian
la source
1
Hé, il est même répondu en double; mais appelons-le un bon doublon.

Réponses:

9

Les réponses à la question précédente liée s'appliquent également ici.

Si (vrais positifs + faux négatifs) = 0, alors aucun cas positif dans les données d'entrée, donc toute analyse de ce cas n'a aucune information, et donc aucune conclusion sur la façon dont les cas positifs sont traités. Vous voulez N / A ou quelque chose de similaire comme résultat du rapport, en évitant une division par zéro erreur

Si (vrais positifs + faux positifs) = 0 alors tous les cas ont été prédits négatifs: c'est une extrémité de la courbe ROC. Encore une fois, vous voulez reconnaître et signaler cette possibilité tout en évitant une division par zéro erreur.

Henri
la source
Merci Henry pour la réponse. Si je comprends bien, dans le premier cas, vous ne voulez pas reconnaître et rapporter le résultat, alors que dans le dernier cas vous le faites . Est-ce exact?
Raffi Khatchadourian
Oui: dans le cas des entrées non positives, la précision n'a pas de sens; dans le cas non positif, vous souhaitez signaler que le test a été défini comme extrêmement négatif.
Henry
5

Une réponse intéressante est proposée ici: https://github.com/dice-group/gerbil/wiki/Precision,-Recall-and-F1-measure

Les auteurs du module produisent différents scores de précision et de rappel selon que les vrais positifs, les faux positifs et les faux négatifs sont tous à 0. Si tel est le cas, le résultat est apparemment bon.

Dans certains cas rares, le calcul de la précision ou du rappel peut entraîner une division par 0. En ce qui concerne la précision, cela peut se produire s'il n'y a aucun résultat dans la réponse d'un annotateur et, ainsi, les vrais et les faux positifs sont 0 Pour ces cas particuliers, nous avons défini que si les vrais positifs, les faux positifs et les faux négatifs sont tous à 0, la précision, le rappel et la mesure F1 sont à 1. Cela peut se produire dans les cas où l'étalon-or contient un document sans aucun annotations et l'annotateur (correctement) ne renvoie aucune annotation. Si les vrais positifs sont 0 et que l'un des deux autres compteurs est supérieur à 0, la précision, le rappel et la mesure F1 sont 0.

Je ne sais pas si ce type de notation serait utile dans d'autres situations en dehors de leur cas particulier, mais cela mérite réflexion.

shiri
la source
1

Lors de l'évaluation d'un classificateur à des seuils élevés, la précision peut (souvent en fait) ne pas être 1 lorsque le rappel est 0. C'est généralement N / A! Je pense qu'il y a quelque chose qui ne va pas dans la façon dont les gens tracent la courbe P / R. Éviter les échantillons N / A est un biais dans le sens où vous évitez les échantillons de singularité. J'ai calculé la précision moyenne par rapport au rappel moyen en ignorant les échantillons N / A et je n'ai jamais obtenu de classificateur commençant à 1 pour un rappel de 0 pour un réseau neuronal peu profond dans la détection d'objets. Cela était également vrai pour les courbes calculées avec les nombres tp, fp, fn. Il est assez facile de vérifier au papier et au crayon avec une seule image. Par exemple: J'ai un classifieur qui produit pour une seule image: preds = [. 7 .6 .5 .1 .05] vérité = [nynny] En calculant les matrices de confusion avec les différents seuils que nous avons: tp = [2 1 1 1 0 0], fn = [0 1 1 1 2 2], fp = [3 3 2 1 1 0]. le rappel rec = [1 .5 .5 .5 0 0], et la précision = [. 4 .25 1/3 .5 0 NaN]. Je ne vois pas comment il serait logique de remplacer un NaN ou la précision (@ rappel == 0) par 1. 1 devrait être une limite supérieure, pas une valeur avec laquelle nous remplaçons la précision (@ rappel == 0).

Jonathan Blanchette
la source