Пам'ятай головне: зміщення й дисперсія — властивості процедури навчання, а не однієї навченої моделі. Тому всі завдання так чи інакше вимагають кількох запусків на різних даних.
рівень 1Рівень 1 — База
Повтори експеримент із практики на своїй істинній функції. Візьми будь-яку не-поліноміальну залежність: $f(x) = e^{-x^2}$, $f(x) = |x|$, ступінчаста функція — що завгодно.
- Побудуй «віяло» з 200 паралельних світів для трьох степенів: маленького, середнього й завеликого.
- Порахуй зміщення², дисперсію й шум для степенів від 1 до 12.
- Знайди степінь, на якому сума мінімальна.
Зроблено, якщо: є таблиця з чотирьох стовпців (степінь, зміщення², дисперсія, разом), у ній видно, що зміщення² спадає, а дисперсія росте, і ти назвав(ла) оптимальний степінь із поясненням, чому він не збігається з мінімумом жодного з доданків окремо.
рівень 2Рівень 2 — Плюс
Перенеси експеримент на k-NN (sklearn.neighbors.KNeighborsRegressor). Тут роль
регулятора складності грає $k$, і крутиться він у протилежний бік: маленьке $k$ —
складна модель.
- Порахуй зміщення² і дисперсію для $k$ від 1 до 25 на тих самих даних.
- Побудуй графік обох доданків від $k$ і познач мінімум суми.
- Окремо перевір крайні випадки: $k = 1$ і $k = n$ (усі точки в сусідах).
Зроблено, якщо: графік показує дзеркальну картину до полінома — при $k=1$ дисперсія максимальна, а зміщення² мінімальне; при $k = n$ модель вироджується в константу (нульова дисперсія, величезне зміщення). І ти написав(ла) двома реченнями, чому саме так: що конкретно усереднює k-NN, коли $k$ росте.
рівень 3Рівень 3 — Виклик
Досліди межу застосовності самого розкладу — те, про що лекція каже одним абзацом: «він працює для квадратичної помилки».
- Візьми задачу класифікації (наприклад,
make_moonsз шумом) і функцію втрат «частка помилкових класифікацій» (0-1 loss). - Проведи той самий експеримент із паралельними світами для дерев різної глибини. Для кожної тестової точки порахуй: як часто моделі помиляються, і яку відповідь дає «більшість» моделей.
- Спробуй розкласти середню помилку на «зміщення» (більшість моделей помиляється) і «дисперсію» (моделі не згодні між собою).
Зроблено, якщо: ти показав(ла) числом, що для 0-1 loss доданки не сумуються в загальну помилку так само акуратно, як для MSE, — і пояснив(ла) на конкретному прикладі, чому: знайди тестову точку, де дисперсія моделей зменшує помилку, а не збільшує її.
Підказки
- Скрізь, де в тебе поліном високого степеня: бери базис Лежандра
(
numpy.polynomial.legendre.legvander), а не сирі степеніx**k. Інакше на степені 12 ти поміряєш похибку арифметики замість дисперсії моделі. - Дисперсія — це
predictions.var(axis=0), усереднена по тестових точках. Вісь 0 — це саме «по світах», і переплутати осі тут найлегше. Перевіряй форму матриці друком. - Рівень 3: підказка до головного ефекту. Уяви точку, де середня модель відповідає неправильно. Якщо всі моделі згодні між собою — помиляються всі, помилка 100%. Якщо ж моделі розкидані — частина випадково вгадає. Тобто розкид тут рятує. З квадратичною помилкою таке неможливе: там дисперсія завжди додається зі знаком плюс.