ComeçarComece de graça

Compromisso entre precisão e recall

Quando a gente tá trabalhando com tarefas de classificação, o termo “trade-off entre precisão e recall” aparece bastante. De onde isso vem?

Normalmente, a classe com maior probabilidade é escolhida para atribuir o documento. Mas e se a probabilidade máxima for igual a 0.1? Você acha que esse documento tem só 10% de chance de estar nessa categoria?

A resposta depende do problema que você está enfrentando. Dá pra adicionar um limite mínimo pra aceitar a classificação e, ao mudar esse limite, os valores de precisão e recall mudam em direções opostas.

As variáveis y_true e o modelo model são carregados. Além disso, se a probabilidade for menor que o limite, o documento vai ser atribuído a “ DEFAULT_CLASS ” (escolhido como classe “ 2 ”).

Este exercício faz parte do curso

Redes Neurais Recorrentes (RNNs) para Modelagem de Linguagem com Keras

Ver curso

Instruções do exercício

  • Use o método “ .predict() ” pra pegar as probabilidades pra cada classe e guarde elas na variável “ pred_probabilities ”.
  • Aceite a probabilidade máxima só se ela for maior ou igual a 0.5 e guarde os resultados na variável y_pred_50.
  • Use as funções “ np.argmax() ” e “ np.max() ” para fazer o mesmo para um limite igual a “ 0.8 ”.
  • Imprima a variável “ trade_off ” com todas as métricas.

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

# 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 e executar o código