Wie berechnet Keras die Genauigkeit?

26

Wie berechnet Keras die Genauigkeit aus den klassenweisen Wahrscheinlichkeiten? Nehmen wir zum Beispiel an, wir haben 100 Proben im Test-Set, die zu einer von zwei Klassen gehören können. Wir haben auch eine Liste der klassenweisen Wahrscheinlichkeiten. Welchen Schwellenwert verwendet Keras, um eine Stichprobe einer der beiden Klassen zuzuweisen?

Raghuram
quelle
Verwenden Sie model.evaluate in Keras?
Hima Varsha
Ja, ich benutze model.evaluate. Genauer gesagt, model.evaluate_generator.
Raghuram
Möglicherweise im Zusammenhang mit @SO: Wie bewertet Keras die Genauigkeit? )
desertnaut

Antworten:

24

Für die binäre Klassifizierung lautet der Code für die Genauigkeitsmetrik:

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

was darauf hindeutet, dass 0,5 der Schwellenwert ist, um zwischen Klassen zu unterscheiden. y_true sollte in diesem Fall natürlich 1-hots sein.

Bei der kategorialen Klassifizierung ist das etwas anders:

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

was bedeutet "wie oft haben Vorhersagen ein Maximum an der gleichen Stelle wie die wahren Werte"

Es gibt auch eine Option für die k-höchste kategoriale Genauigkeit, die der obigen Option ähnelt, jedoch berechnet, wie oft die Zielklasse in den k-höchsten Vorhersagen enthalten ist.

Mikhail Yurasov
quelle
Danke für die Antwort. Bedeutet das, dass die Labels auch für die binäre Klassifizierung eine Hot-Codierung benötigen?
Raghuram
@ Raghuram Nein, für die binäre Klassifizierung brauchen Sie nur 0 oder 1 als Klasse, keine Notwendigkeit, sie im laufenden Betrieb zu codieren. Da K.mean (K.equal (y_true, K.round (y_pred))) für jeden Fall mit 2 Float-Werten übereinstimmt, muss es 0 oder 1 sein und nicht [0,1], [1,0].
Divyanshu Kalra
Verwenden Sie für kategoriale Genauigkeit categorical_accuracy.
Shital Shah
1
Gibt es für ein Problem mit mehreren Klassen (mit mehr als zwei Klassen) einen Unterschied zwischen der Verwendung von "Genauigkeit" und "kategoriale Genauigkeit"
Quetzalcoatl