Comment Keras calcule-t-il la précision?

26

Comment Keras calcule-t-il la précision à partir des probabilités par classe? Disons, par exemple, que nous avons 100 échantillons dans l'ensemble de test qui peuvent appartenir à l'une des deux classes. Nous avons également une liste des probabilités par classe. Quel seuil Keras utilise-t-il pour affecter un échantillon à l'une des deux classes?

Raghuram
la source
utilisez-vous model.evaluate en keras?
Hima Varsha
Oui, j'utilise model.evaluate. Plus précisément, model.evaluate_generator.
Raghuram
@SO peut-être lié: Comment Keras évalue-t-il la précision? )
desertnaut

Réponses:

24

Pour la classification binaire, le code pour la métrique de précision est:

K.mean(K.equal(y_true, K.round(y_pred)))

ce qui suggère que 0,5 est le seuil pour distinguer les classes. y_true devrait bien sûr être 1-hots dans ce cas.

C'est un peu différent pour la classification catégorielle:

K.mean(K.equal(K.argmax(y_true, axis=-1), K.argmax(y_pred, axis=-1)))

ce qui signifie "combien de fois les prévisions ont le maximum au même endroit que les vraies valeurs"

Il existe également une option pour la précision catégorielle top-k, qui est similaire à celle ci-dessus, mais calcule la fréquence à laquelle la classe cible se trouve dans les prédictions top-k.

Mikhail Yurasov
la source
Merci pour la réponse. Cela signifie-t-il que même pour la classification binaire, les étiquettes doivent être codées à chaud?
Raghuram
@Raghuram Non, pour la classification binaire, vous avez juste besoin de 0 ou 1 comme classe, pas besoin de les encoder à chaud. Étant donné que K.mean (K.equal (y_true, K.round (y_pred))) correspondra à 2 valeurs flottantes pour chaque cas, il doit donc être 0 ou 1 et non [0,1], [1,0].
Divyanshu Kalra
Pour une précision catégorique, utilisez categorical_accuracy.
Shital Shah
1
pour un problème multi-classes (avec plus de deux classes), y a-t-il une différence entre l'utilisation de "précision" et "categorical_accuracy"
Quetzalcoatl