Оптимизация порога классификации
Вы слышали, что значение порога по умолчанию — 0,5 — теоретически максимизирует точность, но хотите проверить, как это работает на практике. Поэтому вы перебираете несколько различных значений порога, чтобы определить, какую точность даёт каждый из них, и найти наилучшее значение. Затем вы повторяете этот эксперимент для метрики F1. Является ли 0,5 оптимальным порогом? Совпадают ли оптимальные пороги для точности и для F1? Проверьте сами! Вам доступна матрица scores, полученная в результате оценки тестовых данных. Истинные метки тестовых данных также доступны в переменной y_test. Дополнительно предварительно загружены две функции numpy — argmin() и 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)])