Домашнє завдання

Підбір гіперпараметрів

Усі три рівні робляться на одному наборі даних. Візьми будь-який із двох: дошку оголошень із практики (клітинка 1 зошита) або вбудований sklearn.datasets.load_breast_cancer(). Головне — зафіксувати random_state скрізь, де він є, інакше твої числа не повторяться навіть у тебе.


рівень 1Рівень 1 — База

Підбери один гіперпараметр однієї моделі так, як це зроблено в лекції: сітка по одній осі, StratifiedKFold на 5 фолдів, тестова частина не чіпається до кінця. Модель бери не kNN — наприклад, DecisionTreeClassifier із max_depth від 1 до 15 або LogisticRegression із C по логарифмічній шкалі [0.001, 0.01, 0.1, 1, 10, 100].

Побудуй три криві на одному графіку: точність на навчальній вибірці, оцінка крос-валідації, точність на відкладеній частині.

Зроблено, якщо: на графіку видно, що максимум кривої «навчання» стоїть не там, де максимум крос-валідації, і в підписі названо обидва значення гіперпараметра й обидві точності числами. Якщо для твоєї моделі криві збіглися — напиши, чому (підказка: подивись, чи керує твій гіперпараметр складністю моделі взагалі).


рівень 2Рівень 2 — Плюс

Порівняй сітку й випадковий пошук на однаковому бюджеті.

  1. Склади сітку з чотирьох гіперпараметрів своєї моделі — так, щоб вийшло не менше 200 комбінацій. Запусти GridSearchCV і заміряй час.
  2. Запусти RandomizedSearchCV по тих самих діапазонах із n_iter, рівним чверті кількості комбінацій. Заміряй час.
  3. Порівняй три речі: найкращу оцінку, кількість навчань і час.
  4. Повтори крок 2 із п'ятьма різними random_state і подивись на розкид найкращої оцінки випадкового пошуку.

Зроблено, якщо: є таблиця з рядками «сітка» й «випадковий пошук ×5» і колонками «найкраща оцінка», «навчань», «секунд», а в тексті сказано, чи потрапив хоч один із п'яти запусків випадкового пошуку в оцінку сітки — і чому це не питання везіння, а питання того, скільки ручок у твоїй сітці справді впливають на результат.


рівень 3Рівень 3 — Виклик

Виміряй оптимістичне зміщення на своїх даних так, щоб число не можна було списати на одне вдале розбиття.

  1. Зроби 15 різних розбиттів train_test_split із різними random_state.
  2. Для кожного: підбери гіперпараметр крос-валідацією на навчальній частині, запам'ятай найкращу CV-оцінку й точність цієї ж моделі на відкладеній частині.
  3. Окремо порахуй те саме для гіперпараметра, зафіксованого заздалегідь (візьми значення за замовчуванням scikit-learn).
  4. Порівняй середні розриви «оцінка мінус правда» для обраного й для фіксованого.
  5. Тепер збільш сітку вдесятеро — додай ще дві ручки — і повтори пункти 1–4.

Зроблено, якщо: є два числа чистої ціни вибору (для малої й великої сітки) і сформульовано, у який бік вона змінилась. Якщо зміна виявилась меншою, ніж ти очікував, — поясни це через кореляцію між кандидатами, а не через «експеримент не вдався».


Підказки