Усі три рівні спираються на одну звичку, заради якої й написана тема: міряти дві помилки, а не одну, і дивитись на відстань між ними.
рівень 1Рівень 1 — База
Візьми будь-який набір даних для регресії з однією числовою ознакою — свій, згенерований
або sklearn.datasets.make_regression із доданою нелінійністю. Розбий його на навчальну
й тестову частини у пропорції приблизно 1 до 10 (навчальних точок має бути мало: 15–25).
Пройди степені полінома від 1 до 15 і побудуй таблицю з трьох колонок: степінь, помилка на навчанні, помилка на тесті.
Зроблено, якщо: - таблиця надрукована й у ній видно, що навчальна помилка жодного разу не зросла; - ти назвав степінь із найменшою тестовою помилкою й степінь, з якого тестова пішла вгору; - ти написав одним реченням, чому ці два степені можуть не збігатися.
рівень 2Рівень 2 — Плюс
Побудуй криву навчання: зафіксуй один свідомо складний степінь (9 або більше) і намалюй обидві помилки як функцію обсягу навчальної вибірки — щонайменше вісім значень від 12 до 500 точок.
Далі зроби те саме для степеня 1.
Зроблено, якщо: - обидва графіки побудовані й підписані; - ти назвав обсяг вибірки, з якого розрив для складної моделі стає меншим за 10 % від тестової помилки; - ти пояснив, чому на графіку для степеня 1 криві сходяться майже одразу і чому подальше додавання даних там нічого не змінює.
рівень 3Рівень 3 — Виклик
У лекції ми чесно зізнались, що обирали степінь за тестовою вибіркою — тобто підглядали у відповідь. Поміряй, скільки коштує це підглядання.
Проведи такий дослід:
- Розбий дані на три частини: навчальну, валідаційну й тестову.
- Обери найкращий степінь за валідаційною частиною.
- Поміряй помилку обраної моделі на валідаційній і на тестовій частинах.
- Повтори кроки 1–3 щонайменше 30 разів із різними розбиттями й усередни обидва числа.
Зроблено, якщо: - ти отримав дві середні величини — помилку на валідації та на тесті — і показав, що перша систематично менша; - ти назвав цю різницю числом і пояснив, звідки вона береться (підказка: ми беремо мінімум із пʼятнадцяти шумних вимірювань); - ти перевірив, що станеться з різницею, якщо валідаційну частину збільшити вдвічі.
Підказки
- Якщо на високих степенях крива перетворюється на сміття, а не на красиві коливання, —
це не перенавчання, а чисельна поломка. Стисни ознаку у відрізок
[-1, 1]і візьми поліноми Лежандра (numpy.polynomial.legendre.legvander) замість сирих степенів. - Тестова вибірка має бути великою (200–300 точок), інакше крива помилки стрибатиме так, що випадковий провал виявиться «мінімумом» і зіпсує весь дослід.
- Для рівня 3 не пиши цикл із нуля:
sklearn.model_selection.train_test_splitз різнимrandom_stateрозбиває дані заново кожного разу. - Помилку зручно міряти в одиницях цільової змінної (RMSE), а не в безрозмірних — тоді число одразу читається як «модель промахується в середньому на стільки».