Оптимізація порога
Ви чули, що значення за замовчуванням 0,5 теоретично максимізує accuracy, але хочете перевірити це на практиці. Спробуйте кілька різних значень порога, щоб побачити, яку accuracy ви отримаєте, і визначити поріг із найкращим результатом. Повторіть експеримент для метрики F1. Чи є 0,5 оптимальним порогом? Чи збігаються оптимальні пороги для accuracy та для 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]. - Пройдіться цим списком і обчисліть accuracy для кожного порога. Повторіть для метрики F1.
- Використовуючи
argmin()абоargmax(), знайдіть оптимальний поріг для accuracy та для 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)])