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

Лінійна регресія

Лінійна регресія рідко виграє змагання — її цінність у тому, що вона прозора. Домашнє завдання про це: не «навчити модель», а зрозуміти, що саме вона порахувала і чи можна їй вірити.


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

Повтори весь пайплайн практики на іншому датасеті — і подивись на залишки.

  1. Візьми sklearn.datasets.load_diabetes() — він іде разом зі scikit-learn і нічого не тягне з мережі — або будь-який власний CSV із числовою ціллю.
  2. Обери одну ознаку, навчи МНК через нормальне рівняння на чистому NumPy і звір коефіцієнти з LinearRegression — різниця має бути на рівні 10⁻⁸.
  3. Порахуй MSE, RMSE, MAE і R². Окремо порахуй R² моделі, яка завжди прогнозує середнє.
  4. Побудуй графік залишків: по горизонталі — прогноз, по вертикалі — залишок.

Зроблено, якщо: є assert np.allclose(наші_коефіцієнти, sklearn_коефіцієнти), який проходить, і словесний висновок про графік залишків: чи це безструктурна хмара навколо нуля, чи видно дугу, воронку або викиди. Назви літеру з LINE, яку порушено.


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

Покажи, що R² не можна використовувати для вибору кількості ознак.

  1. До реальних ознак свого датасету по черзі додавай стовпці чистого шуму (rng.normal(0, 1, n)) — від 0 до 30 штук.
  2. Для кожної кількості порахуй звичайний R² на навчальній вибірці і скоригований (adjusted) R² за формулою 1 − (1 − R²)·(n − 1)/(n − p − 1).
  3. Окремо порахуй R² на відкладеній тестовій вибірці.
  4. Побудуй три криві на одному графіку.

Зроблено, якщо: на графіку звичайний навчальний R² монотонно росте, скоригований перестає рости й починає падати, а тестовий падає найшвидше. Назви кількість шумових стовпців, після якої скоригований R² уперше пішов униз, і поясни в одному реченні, чому звичайний R² росте навіть від чистого шуму.


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

Побудуй шлях регуляризації (regularization path) і зрозумій різницю між Ridge і Lasso.

  1. Візьми датасет із щонайменше 8 ознаками, обовʼязково їх стандартизуй.
  2. Реалізуй Ridge самостійно за формулою β = (XᵀX + λI)⁻¹Xᵀy. Вільний член не штрафуй — для цього достатньо відняти середнє від y і від кожної ознаки.
  3. Для λ від 10⁻⁴ до 10⁴ (логарифмічна сітка з 50 точок) побудуй графік: кожен коефіцієнт — окрема лінія, вісь λ логарифмічна.
  4. Зроби те саме для sklearn.linear_model.Lasso і намалюй обидві картинки поруч.
  5. Для обох знайди λ з найкращою помилкою на крос-валідації.

Зроблено, якщо: видно якісну різницю між картинками — у Ridge усі коефіцієнти плавно осідають до нуля, у Lasso вони по черзі точно занулюються. Назви, які саме ознаки Lasso вимкнув першими, які лишив останніми, і чи збігається цей порядок із твоїм уявленням про їхню важливість. Перевір assert-ом, що твоя реалізація Ridge збігається з sklearn.linear_model.Ridge при однаковому λ.


Підказки