НачатьНачать бесплатно

Компромисс между точностью и полнотой

При работе с задачами классификации часто встречается понятие компромисс между точностью и полнотой. Откуда оно берётся?

Обычно документ относят к тому классу, вероятность которого наибольшая. Но что, если максимальная вероятность равна 0.1? Стоит ли считать, что документ принадлежит этому классу при вероятности всего 10%?

Ответ зависит от конкретной задачи. Можно задать минимальный порог для принятия классификации — и при изменении этого порога значения точности и полноты будут меняться в противоположных направлениях.

Переменная y_true и модель model уже загружены. Если вероятность окажется ниже порогового значения, документ будет отнесён к DEFAULT_CLASS (выбран класс 2).

Это упражнение является частью курса

Рекуррентные нейронные сети (RNN) для языкового моделирования с 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'])

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