Otimização do limiar
Você ouviu que o valor padrão de 0,5 maximiza a acurácia em teoria, mas quer testar o que acontece na prática. Então, você experimenta vários valores de limiar diferentes para ver a acurácia obtida e, assim, determinar o limiar com melhor desempenho. Você repete esse experimento para o score F1. 0,5 é o limiar ideal? O limiar ideal para acurácia e para o score F1 é o mesmo? Vá em frente e descubra! Você tem disponível uma matriz scores, obtida ao pontuar os dados de teste. Os rótulos verdadeiros dos dados de teste também estão disponíveis como y_test. Por fim, duas funções do numpy já estão pré-carregadas, argmin() e argmax(), que recuperam, respectivamente, o índice dos valores mínimo e máximo em um array, além das métricas accuracy_score() e f1_score().
Este exercício faz parte do curso
Projetando Workflows de Machine Learning em Python
Instruções do exercício
- Crie uma faixa de valores de limiar que inclua 0.0, 0.25, 0.5, 0.75 e 1.0.
- Usando compreensão de listas dupla, armazene as previsões para cada valor de limiar na faixa acima. Lembre-se de que obter rótulos para uma matriz de pontuações usando um limiar
thré possível com[s[1] > thr for s in scores]. - Percorra essa lista e calcule a acurácia para cada limiar. Repita para o score F1.
- Usando
argmin()ouargmax(), encontre o limiar ideal para acurácia e para F1.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
# 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)])