Компроміс Precision–Recall
Під час роботи із задачами класифікації часто з'являється термін компроміс Precision–Recall. Звідки він береться?
Зазвичай документ відносять до класу з найвищою імовірністю. Але що, коли максимальна імовірність дорівнює 0.1? Чи варто вважати, що документ належить до цього класу лише з 10% імовірністю?
Відповідь залежить від конкретної задачі. Можна додати мінімальний поріг для прийняття класифікації, і при зміні цього порога значення precision і recall рухаються у протилежних напрямах.
Змінні y_true і модель model уже завантажені. Також, якщо імовірність нижча за поріг, документ буде віднесено до DEFAULT_CLASS (обрано клас 2).
Ця вправа є частиною курсу
Recurrent Neural Networks (RNNs) для моделювання мови з Keras
Інструкції до вправи
- Використайте метод
.predict(), щоб отримати імовірності для кожного класу, і збережіть їх у зміннійpred_probabilities. - Приймайте максимальну імовірність лише якщо вона більша або дорівнює
0.5, і збережіть результати в зміннійy_pred_50. - Використайте функції
np.argmax()таnp.max(), щоб зробити те саме для порога0.8. - Виведіть змінну
trade_offз усіма метриками.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# 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'])
____