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

Оптимизация порога классификации

Вы слышали, что значение порога по умолчанию — 0,5 — теоретически максимизирует точность, но хотите проверить, как это работает на практике. Поэтому вы перебираете несколько различных значений порога, чтобы определить, какую точность даёт каждый из них, и найти наилучшее значение. Затем вы повторяете этот эксперимент для метрики F1. Является ли 0,5 оптимальным порогом? Совпадают ли оптимальные пороги для точности и для F1? Проверьте сами! Вам доступна матрица scores, полученная в результате оценки тестовых данных. Истинные метки тестовых данных также доступны в переменной y_test. Дополнительно предварительно загружены две функции numpyargmin() и argmax(), которые возвращают индекс минимального и максимального значения в массиве соответственно, а также метрики accuracy_score() и f1_score().

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

Проектирование рабочих процессов машинного обучения на Python

Посмотреть курс

Инструкции к упражнению

  • Создайте диапазон значений порога, включающий 0,0, 0,25, 0,5, 0,75 и 1,0.
  • С помощью двойного спискового включения сохраните предсказания для каждого значения порога из указанного диапазона. Напомним, что получить метки из матрицы оценок с помощью порога thr можно следующим образом: [s[1] > thr for s in scores].
  • Пройдите по этому списку и вычислите точность для каждого значения порога. Повторите то же самое для метрики F1.
  • С помощью argmin() или argmax() найдите оптимальный порог для точности и для F1.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

# Create a range of equally spaced threshold values
t_range = ____

# Store the predicted labels for each value of the threshold
preds = [[____ > thr for s in scores] for ____ in ____]

# Compute the accuracy for each threshold
accuracies = [____(____, ____) for p in preds]

# Compute the F1 score for each threshold
f1_scores = [____(____, ____) for p in preds]

# Report the optimal threshold for accuracy, and for F1
print(t_range[____(accuracies)], t_range[____(f1_scores)])
Редактировать и запускать код