Optimizar el umbral
Has oído que el valor predeterminado de 0.5 maximiza la accuracy en teoría, pero quieres comprobar qué pasa en la práctica. Así que pruebas distintos valores de umbral para ver qué accuracy obtienes y, con ello, determinar el umbral con mejor rendimiento. Repites el experimento para la puntuación F1. ¿Es 0.5 el umbral óptimo? ¿Es el umbral óptimo para accuracy y para la puntuación F1 el mismo? ¡Adelante, descúbrelo! Tienes disponible una matriz de scores, obtenida al puntuar los datos de prueba. Las etiquetas verdaderas de los datos de prueba también están disponibles como y_test. Por último, hay dos funciones de numpy precargadas, argmin() y argmax(), que recuperan respectivamente el índice del valor mínimo y máximo de un array, además de las métricas accuracy_score() y f1_score().
Este ejercicio forma parte del curso
Diseño de flujos de trabajo de Machine Learning en Python
Instrucciones del ejercicio
- Crea un rango de valores de umbral que incluya 0.0, 0.25, 0.5, 0.75 y 1.0.
- Mediante una comprensión doble de listas, guarda las predicciones para cada valor de umbral del rango anterior. Recuerda que obtener etiquetas para una matriz de puntuaciones usando un umbral
thres posible con[s[1] > thr for s in scores]. - Recorre esa lista y calcula la accuracy para cada umbral. Repite para la puntuación F1.
- Usando
argmin()oargmax(), encuentra el umbral óptimo para accuracy y para F1.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
# Create a range of equally spaced threshold values
t_range = ____
# Store the predicted labels for each value of the threshold
preds = [[____ > thr for s in scores] for ____ in ____]
# Compute the accuracy for each threshold
accuracies = [____(____, ____) for p in preds]
# Compute the F1 score for each threshold
f1_scores = [____(____, ____) for p in preds]
# Report the optimal threshold for accuracy, and for F1
print(t_range[____(accuracies)], t_range[____(f1_scores)])