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
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.5e guarde os resultados na variávely_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'])
____