Tabla de Contenidos

8.f Otras métricas

Veamos ahora otras métricas de clasificación.

Top-N-Accuracy

En problemas de clasificación en los que hay muchísimos clases a clasificar , se puede usar otra métrica llamada Top-N Accuracy. Veamos en que consiste.

El problema de clasificación de ImageNet hay 1000 posibles clases a clasificar. En ese caso cuando decimos que un "gato" es un "gato" es que la clase gato tiene la mayor probabilidad. Veamos un ejemplo con 10 objetos.

Clase Probabilidad
Casa 0.06
Botella 0,04
Farola 0,15
Gato 0,34
Perro 0,28
Niño 0,04
Adulto 0,02
Bicicleta 0,03
Semáforo 0,001
Puente 0,039

Si la imagen es de un gato, en este caso diríamos que ha acertado ya que la probabilidad de ser gato es del 34% y es la mayor de todas. Y con eso calcularíamos el valor de Accuracy.

Sin embargo veamos este otro ejemplo:

Clase Probabilidad
Casa 0.06
Botella 0,04
Farola 0,15
Gato 0,28
Perro 0,34
Niño 0,04
Adulto 0,02
Bicicleta 0,03
Semáforo 0,001
Puente 0,039

En este nuevo ejemplo, también le hemos pasado una imagen de una gato pero la probabilidad de ser gato es del 28% mientras que la de ser perro es del 34%. Por ello diríamos que no ha acertado.

Sin embargo usando la métrica de Top-2 Accuracy, diríamos que ha acertado si el gato está entre las 2 que tiene mayor probabilidad. Y en este caso si que diríamos que ha acertado.

Esta métrica tiene sentido cuando hay muchísimas clases (En ImageNet hay 1000 clases). Y aunque la predicción correcta no sea la mejor al menos está entre las 2 primeras Top-2-Accuracy.

En el siguiente artículo Image classification with Vision Transformer se ve como se usa la métrica de Top-5-Accuracy.

Keras

en keras se puede usar esta métrica con tf.keras.metrics.SparseTopKCategoricalAccuracy.

Por defecto esta métrica calcula es top-5-Accuracy.Pero se puede cambiar con el parámetro k.

model.compile(optimizer='sgd',loss='sparse_categorical_crossentropy',metrics=[keras.metrics.SparseTopKCategoricalAccuracy()])
model.compile(optimizer='sgd',loss='sparse_categorical_crossentropy',metrics=[keras.metrics.SparseTopKCategoricalAccuracy(k=5, name='top-5-accuracy')])

Más información:

Fbeta-score

El $F_{\beta}\text{-score}$ es como F1-score pero permite ajustar si penalizamos más los falsos positivos o los falsos negativos. Al dar más importancia a uno que a otro realmente no es una métrica de rendimiento general ya que está "ponderada".

La formula es:

$$ F_{\beta}\text{-score}=\frac{(1+\beta^2) \cdot precision \cdot sensibilidad}{\beta^2 \cdot precision+sensibilidad} $$

Si $\beta=1$ la fórmula es la de $F_1\text{-score}$ por eso se le llama así porque la $\beta$ es un 1.

Interpretación de β

Veamos ahora unos ejemplos:

Sensibilidad Precisión β $F_{1}\text{-score}$
$0,2$ $0,6$ $0,5$ $0,3$
$0,6$ $0,2$ $0,5$ $0,3$
Sensibilidad Precisión β $F_{2}\text{-score}$
$0,2$ $0,6$ $2$ $0,23$
$0,6$ $0,2$ $2$ $0,43$

El caso base es 0,3 y al usar β=2; con una baja sensibilidad (0,2) el resultado es más bajo aun (0,23) mientras que con una alta sensibilidad (0,6) el valor es mayor (0,43)

Sensibilidad Precisión β $F_{0.5}\text{-score}$
$0,2$ $0,6$ $0,5$ $0,43$
$0,6$ $0,2$ $0,5$ $0,23$

El caso base es 0,3 y al usar β=2 con una baja precisión (0,2) el resultado es más bajo aun (0,23) mientras que con una alta precisión (0,6) el valor es mayor (0,43)

Más información:

Valor de β

¿Pero cuanto es realmente se valor? Veámoslo con un ejemplo con β = 2 frente a β = 2.5.

Es decir, el valor de β no es la relación directa entre sensibilidad y precisión, sino que se eleva al cuadrado. A medida que β aumenta, la sensibilidad pesa exponencialmente más que la precisión.

Para calcular la $\beta$ se usa la regla de:

$$ \beta=\sqrt{n} $$

$$ \beta=\sqrt{\frac{1}{n}} $$

Veamos ahora ejemplo de valores alto y bajos de β.

Keras

En keras se puede usar esta métrica con tf.keras.metrics.FBetaScore.

Lo importante es que hay que establecer el parámetro de β (como un float y no como un int).

metrics=[tf.keras.metrics.FBetaScore(beta=2.0)]

history.history['fbeta_score']
history.history['val_fbeta_score']

Más información: