Herramientas de usuario

Herramientas del sitio


clase:iabd:pia:2eval:tema08.otras-metricas

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 β

  • Si β = 1, la métrica se reduce al F1-score, que da igual peso a la precisión y la sensibilidad.
  • Si β > 1, penaliza más una baja sensibilidad, lo que significa que los falsos negativos (FN) penalizan más que los falsos positivos (FP).
  • Si β < 1, penaliza más una baja precisión, lo que significa que los falsos positivos (FP) penalizan más que los falsos negativos (FN).

Veamos ahora unos ejemplos:

  • Con β=1 ambos están equilibrados. Y da lo mismo que se intercambien los valores de Sensibilidad y Precisión
Sensibilidad Precisión β $F_{1}\text{-score}$
$0,2$ $0,6$ $0,5$ $0,3$
$0,6$ $0,2$ $0,5$ $0,3$
  • Con β=2, la baja sensibilidad penaliza 4 veces más que la precisión
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)

  • Con β=0,5 la baja precisión penaliza 4 veces más que la sensibilidad
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.

  • Si β = 2, la baja sensibilidad es 4 veces más importante que la precisión, porque 𝛽²=2²=4
  • Si β = 2,5, la baja precisión es 6,25 veces más importante que la sensibilidad, porque 𝛽²=2,5²=6,25

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:

  • Si queremos que la baja sensibilidad penalice $n$ veces más que la precisión, la fórmula es:

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

  • Si queremos que la baja precisión penalice $n$ veces más que la sensibilidad, la fórmula es:

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

Veamos ahora ejemplo de valores alto y bajos de β.

  • β>1:Cuando es más costoso cometer falsos negativos (FN), es decir, cuando es crítico detectar todos los casos positivos aunque implique aumentar los falsos positivos.
    • Diagnóstico de enfermedades graves (Ejemplo: cáncer, VIH, COVID-19):Un falso negativo significa no diagnosticar a un paciente enfermo, lo que puede ser catastrófico.Es mejor un falso positivo (hacer más pruebas) que un falso negativo (no tratar a un paciente).
    • Detección de fraude financiero: Es preferible revisar más transacciones sospechosas (falsos positivos) que dejar pasar fraudes reales (falsos negativos).
    • Sistemas de seguridad y detección de amenazas (Ejemplo: detección de intrusos en redes, ataques cibernéticos, explosivos en aeropuertos, alarmas de incendio): No detectar una amenaza real puede ser desastroso. Se prefiere una mayor tasa de alertas (aunque haya algunas falsas).
  • β<1: Cuando es más costoso cometer falsos positivos (FP), es decir, cuando es crítico que los positivos realmente sean correctos, aunque se pasen por alto algunos casos positivos reales.
    • Clasificación de correos como spam: Un falso negativo (un spam que llega a la bandeja de entrada) es molesto, pero un falso positivo (un email importante que va a la carpeta de spam) puede ser grave.
    • Recomendación de productos o publicidad personalizada: Mostrar un anuncio irrelevante a un usuario (falso positivo) puede ser perjudicial para la experiencia del usuario y la tasa de conversión. Se prefiere precisión para mostrar menos anuncios pero mejor seleccionados.
    • Contratación automática basada en IA: Un falso positivo significaría contratar a un candidato inadecuado, lo que puede ser costoso para la empresa. Es mejor ser más estricto en la selección, aunque se descarte algún candidato válido.
    • Sistemas judiciales y de evaluación de riesgos penales: Un falso positivo (clasificar a una persona como de "alto riesgo" cuando no lo es) puede tener consecuencias graves en términos de derechos humanos. Se prefiere alta precisión para evitar etiquetar injustamente a personas como criminales.

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:

clase/iabd/pia/2eval/tema08.otras-metricas.txt · Última modificación: 2025/02/03 19:35 por admin