Компромисс между точностью и полнотой
При работе с задачами классификации часто встречается понятие компромисс между точностью и полнотой. Откуда оно берётся?
Обычно документ относят к тому классу, вероятность которого наибольшая. Но что, если максимальная вероятность равна 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'])
____