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

Крос-валідація

Одна думка на всі три рівні: число без розкиду — це не результат. Скрізь, де ти звітуєш метрику, звітуй і .std().

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

Візьми будь-який набір із sklearn.datasets (load_wine, load_breast_cancer, load_digits) і будь-який класифікатор.

  1. Порахуй cross_val_score з K = 3, 5, 10 і випиши для кожного середнє та .std().
  2. Для $K = 5$ прожени крос-валідацію з пʼятьма різними random_state у KFold(shuffle=True, random_state=...).
  3. Порівняй: наскільки середнє гуляє від зміни random_state?

Зроблено, якщо: є таблиця «K → середнє ± σ» з трьох рядків і окремий список із пʼяти CV-оцінок для різних random_state. І ти назвав(ла) числом, який діапазон оцінок дає та сама модель на тих самих даних просто від зміни перемішування.

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

У практиці ми ловили залежність рядків через групи. Тепер найпідступніший її різновид — час.

  1. Згенеруй часовий ряд зі 160 точок із помітною автокореляцією: кожна наступна точка — це попередня, помножена на 0.9, плюс невеликий шум.
  2. Побудуй просту модель прогнозу (наприклад, «наступне значення = середнє трьох попередніх») і поміряй її якість трьома способами: звичайним KFold, TimeSeriesSplit і на справжньому майбутньому — останніх 20 точках, які ти не чіпав(ла) взагалі.
  3. Повтори з автокореляцією 0.0 (чистий білий шум).

Зроблено, якщо: є таблиця з шести чисел (три способи × два рівні автокореляції), і по ній видно, що при сильній автокореляції звичайний KFold дає помітно оптимістичну оцінку, TimeSeriesSplit — близьку до правди, а при нульовій автокореляції обидві схеми збігаються. Поясни одним реченням, чому витік зникає разом із залежністю в даних.

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

Виміряй оптимізм від вибору — те, про що розділ 10 лекції.

  1. Візьми задачу, де кандидати насправді однаково хороші: кожен кандидат — це базова модель плюс рівно одна випадкова ознака-шум, не пов'язана з ціллю.
  2. Для кількості кандидатів $m$ від 1 до 30 порахуй три величини:
  3. проста CV: найкраща CV-оцінка серед $m$ кандидатів;
  4. справжня якість: якість цього переможця на незалежній вибірці з 1000 обʼєктів;
  5. вкладена CV: cross_val_score(GridSearchCV(...), X, y, cv=зовнішній_KFold).
  6. Усередни все по 20 незалежних наборах даних, щоб криві не тремтіли.

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

Підказки