ComenzarEmpieza gratis

Compromiso entre precisión y recuperación

Cuando se trabaja con tareas de clasificación, a menudo aparece el término «compromiso entre precisión y recuperación ». ¿De dónde viene?

Por lo general, se elige la clase con mayor probabilidad para asignar el documento. Pero, ¿qué pasa si la probabilidad máxima es igual a 0.1? ¿Deberías considerar que ese documento pertenece a esta clase con solo un 10 % de probabilidad?

La respuesta varía según el problema en cuestión. Es posible añadir un umbral mínimo para aceptar la clasificación, y al cambiar el umbral, los valores de precisión y recuperación se mueven en direcciones opuestas.

Se cargan las variables y_true y el modelo model. Además, si la probabilidad es inferior al umbral, el documento se asignará a « DEFAULT_CLASS » (elegido como clase « 2 »).

Este ejercicio forma parte del curso

Redes neuronales recurrentes (RNN) para el modelado del lenguaje con Keras

Ver curso

Instrucciones del ejercicio

  • Utiliza el método « .predict() » para obtener las probabilidades de cada clase y guárdalas en la variable « pred_probabilities ».
  • Acepta la probabilidad máxima solo si es mayor o igual que 0.5 y almacena los resultados en la variable y_pred_50.
  • Utiliza las funciones « np.argmax() » y « np.max() » para hacer lo mismo con un umbral igual a « 0.8 ».
  • Imprime la variable trade_off con todas las métricas.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

# Get probabilities for each class
pred_probabilities = model.____(X_test)

# Thresholds at 0.5 and 0.8
y_pred_50 = [np.argmax(x) if np.max(x) >= ____ else DEFAULT_CLASS for x in pred_probabilities]
y_pred_80 = [np.____(x) if np.____(x) >= 0.8 else DEFAULT_CLASS for x in pred_probabilities]

trade_off = pd.DataFrame({
    'Precision_50': precision_score(y_true, y_pred_50, average=None), 
    'Precision_80': precision_score(y_true, y_pred_80, average=None), 
    'Recall_50': recall_score(y_true, y_pred_50, average=None), 
    'Recall_80': recall_score(y_true, y_pred_80, average=None)}, 
  index=['Class 1', 'Class 2', 'Class 3'])

____
Editar y ejecutar código