ПочатиПочніть безкоштовно

Компроміс 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'])

____
Редагувати та запускати код