Linear Regression

Практичні завдання та резюме модуля

Три рівні практичних завдань для закріплення знань з лінійної регресії, підсумкові картки ключових концепцій

Практичні завдання та резюме модуля

🎯 Мета підрозділу

  • Закріпити знання через практичні завдання
  • Пройти три рівні складності: базовий, середній, просунутий
  • Систематизувати вивчений матеріал через резюме
  • Підготуватися до наступного модуля

🎓 Структура завдань

  • Рівень 1 (базовий): основні операції, простий код
  • Рівень 2 (середній): алгоритмічні задачі, аналіз
  • Рівень 3 (просунутий): комплексні проєкти, дослідження

Рівень 1: Базові завдання

Ці завдання перевіряють розуміння основних концепцій.

Завдання 1.1: Обчислення передбачення вручну

Дано модель лінійної регресії з параметрами:

  • Завантаження... ($/м²)
  • Завантаження... ($)

Питання:

  1. Обчисліть передбачену ціну для квартири площею 65 м²
  2. Обчисліть передбачену ціну для квартири площею 120 м²
  3. На скільки зросте ціна при збільшенні площі з 50 до 51 м²?

Завдання 1.2: Обчислення метрик якості

Дано три спостереження:

Реальна ціна (Завантаження...)Передбачення (Завантаження...)
30 000 $31 000 $
45 000 $44 000 $
60 000 $58 000 $

Завдання: обчисліть вручну (з калькулятором):

  1. MAE (Mean Absolute Error)
  2. MSE (Mean Squared Error)
  3. RMSE (Root Mean Squared Error)

Завдання 1.3: Реалізація передбачення на NumPy

Напишіть функцію predict(X, w, b), яка приймає:

  • X: масив ознак (одна або кілька)
  • w: вага або вектор вагів
  • b: bias

і повертає передбачення Завантаження....


Рівень 2: Середні завдання

Ці завдання вимагають глибшого розуміння та написання більшого коду.

Завдання 2.1: Реалізація градієнтного спуску для простої регресії

Реалізуйте функцію gradient_descent_simple(X, y, lr, epochs), яка:

  1. Ініціалізує w та b нулями
  2. Виконує epochs ітерацій градієнтного спуску
  3. Повертає фінальні w, b та історію втрат

Формули градієнтів для однієї змінної:

Завантаження...
Завантаження...

Завдання 2.2: Порівняння різних learning rates

Використайте функцію з попереднього завдання, щоб порівняти три значення learning rate:

  • Завантаження... (дуже малий)
  • Завантаження... (оптимальний)
  • Завантаження... (великий)

Побудуйте графік кривих навчання (Loss по епохах) для всіх трьох випадків на одному графіку.

Питання для аналізу:

  1. Який Завантаження... збігається найшвидше?
  2. Чи є Завантаження..., що призводить до розбіжності (втрати зростають)?
  3. Як обрати оптимальний learning rate для нових даних?

Завдання 2.3: Дослідження реального датасету

Завантажте датасет Boston Housing або California Housing з scikit-learn:

from sklearn.datasets import fetch_california_housing

data = fetch_california_housing(as_frame=True)
df = data.frame

Завдання:

  1. Дослідіть дані: df.head(), df.info(), df.describe()
  2. Побудуйте кореляційну матрицю та heatmap (seaborn)
  3. Оберіть одну найкорельованішу ознаку з ціною
  4. Навчіть просту лінійну регресію (одна ознака → ціна)
  5. Обчисліть MAE, RMSE, R²
  6. Побудуйте scatter plot з лінією регресії

Рівень 3: Просунуті завдання

Ці завдання вимагають комплексного підходу та творчості.

Завдання 3.1: Реалізація Mini-Batch Gradient Descent

Реалізуйте варіант градієнтного спуску, де градієнт обчислюється не на всіх даних (Batch GD), а на випадковій підмножині розміром batch_size (наприклад, 32 зразки).

Алгоритм:

  1. На кожній епосі перемішайте дані (rng.shuffle або індекси rng.permutation)
  2. Розділіть на міні-батчі по batch_size зразків
  3. Для кожного батчу обчисліть градієнт та оновіть параметри
  4. Повторіть для всіх епох

Порівняйте:

  • Batch GD (весь датасет)
  • Mini-Batch GD (batch_size = 32)
  • Stochastic GD (batch_size = 1)

Побудуйте криві навчання для всіх трьох методів.


Завдання 3.2: Поліноміальна регресія

Дослідіть випадок, коли дані мають нелінійну залежність.

Кроки:

  1. Згенеруйте дані з квадратичною залежністю:
    rng = np.random.default_rng(seed=42)
    X = np.linspace(0, 10, 100)
    y = 2*X**2 - 5*X + 3 + rng.normal(0, 10, 100)
    
  2. Навчіть три моделі:
    • Лінійну регресію (степінь 1)
    • Поліноміальну регресію степеня 2
    • Поліноміальну регресію степеня 5
  3. Побудуйте всі три моделі на одному графіку
  4. Порівняйте R² для кожної моделі

Підказка: використовуйте PolynomialFeatures з scikit-learn:

from sklearn.preprocessing import PolynomialFeatures

poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X.reshape(-1, 1))

model = LinearRegression()
model.fit(X_poly, y)

Завдання 3.3: Проєкт «Передбачення зарплати за стажем»

Мета: створити повноцінний ML-проєкт з нуля.

Датасет: знайдіть або створіть дані про зарплати та стаж (можна згенерувати синтетично або використати Kaggle).

Етапи проєкту:

  1. Збір та аналіз даних
    • Завантаження даних
    • EDA: розподіли, викиди, кореляції
    • Візуалізація scatter plot
  2. Підготовка даних
    • Обробка пропусків (якщо є)
    • Розділення на train/test (80/20)
    • Нормалізація (StandardScaler)
  3. Навчання моделі
    • Реалізувати градієнтний спуск з нуля
    • Порівняти з scikit-learn LinearRegression
    • Підібрати оптимальний learning rate
  4. Оцінка якості
    • Обчислити MAE, RMSE, R²
    • Побудувати residual plot (залишки vs передбачення)
    • Діагностика: чи є систематичні помилки?
  5. Візуалізація результатів
    • Scatter plot з лінією регресії
    • Крива навчання (Loss по епохах)
    • Порівняння реальних та передбачених значень
  6. Звіт
    • Документ (Markdown або Jupyter Notebook) з описом кожного етапу
    • Висновки: чи можна використовувати модель в production?
Критерії якості проєкту:
  • Код чистий, коментований, структурований
  • Всі графіки мають заголовки, підписи осей, легенди
  • Є чіткі висновки після кожного етапу
  • Порівняння кількох підходів (власна реалізація vs scikit-learn)

Додаткові ресурси для практики

📊 Датасети для практики

  • Kaggle Datasets: kaggle.com/datasets
    • House Prices (Advanced Regression)
    • Car Price Prediction
    • Salary Prediction
  • UCI Machine Learning Repository: класичні датасети
    • Boston Housing
    • Auto MPG
    • Wine Quality
  • Scikit-learn datasets: from sklearn.datasets import load_*
    • California Housing
    • Diabetes
    • Linnerud

🛠️ Інструменти та бібліотеки

  • NumPy: векторні обчислення
  • Pandas: робота з табличними даними
  • Matplotlib / Seaborn: візуалізація
  • Scikit-learn: ML алгоритми
  • Jupyter Notebook: інтерактивні експерименти

📚 Додаткове читання

  • Документація scikit-learn: LinearRegression
  • Khan Academy: Statistics & Probability
  • 3Blue1Brown (YouTube): Linear Algebra
  • StatQuest (YouTube): Regression Series

Підсумкове резюме модуля

📌 Регресійна задача

  • Регресія — передбачення неперервного числового значення
  • Відмінність від класифікації: число vs категорія
  • Приклади: ціна квартири, зарплата, температура

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

  • Формула: Завантаження... (для 1 ознаки)
  • Завантаження... (weight) — нахил, вплив ознаки на результат
  • Завантаження... (bias) — зсув, базове значення
  • Геометрія: пряма лінія (1D), площина (2D), гіперплощина (nD)

📊 Метрики якості

  • MAE — середня абсолютна помилка (інтуїтивна)
  • MSE — середня квадратична помилка (штрафує великі помилки)
  • RMSE — корінь з MSE (зручні одиниці)
  • Завантаження... — частка поясненої варіації (0–1, нормалізована)

⚙️ Градієнтний спуск

  • Функція втрат — міра помилки моделі (MSE)
  • Градієнт — вектор похідних, напрямок зростання
  • Алгоритм: рухатися проти градієнта до мінімуму
  • Learning rate — розмір кроку (критичний гіперпараметр)

🔢 Множинна регресія

  • Формула: Завантаження...
  • Векторна форма: Завантаження...
  • Матрична форма: Завантаження... (для батчу)
  • Feature importance — які ознаки найвпливовіші

⚠️ Обмеження та застереження

  • Працює лише для лінійних залежностей
  • Чутлива до викидів (outliers)
  • Мультиколінеарність — проблема корельованих ознак
  • Припущення: нормальність залишків, гомоскедастичність

Перевірочні питання

Перед переходом до наступного модуля переконайтеся, що ви можете відповісти на ці питання:


Що далі?

🎓 Ви опанували

  • Основи регресійного аналізу
  • Лінійну регресію з однією та багатьма змінними
  • Метрики якості моделей
  • Алгоритм градієнтного спуску
  • Практичну реалізацію на Python

🔜 Наступний модуль

Стаття 3.2: Практична регресія з scikit-learn
Задача Housing Prices

Ми застосуємо вивчені методи до реального датасету Kaggle, навчимося:

  • Обробляти категоріальні ознаки
  • Масштабувати дані (StandardScaler, MinMaxScaler)
  • Заповнювати пропуски (SimpleImputer)
  • Боротися з перенавчанням (train/test split, крос-валідація)
  • Оптимізувати гіперпараметри (GridSearchCV)

Мотиваційна цитата

«Дані — це новий oil, але machine learning — це двигун внутрішнього згорання, який перетворює oil на енергію.»

— Andrew Ng, співзасновник Google Brain, професор Stanford

Ви щойно опанували перший двигун у своїй ML-подорожі — лінійну регресію. Це фундамент, на якому будуються складніші моделі. Попереду — нейронні мережі, випадковий ліс, градієнтний бустинг. Але всі вони спираються на ті ж принципи: функція втрат, градієнтний спуск, оптимізація параметрів.Продовжуйте практикуватися! Машинне навчання — це 10% теорії і 90% практики. Чим більше задач ви розв'яжете, тим глибше розумітимете матеріал.

Фінальне резюме у вигляді карток

✅ MAE (Mean Absolute Error)

Середня абсолютна помилка
Формула: Завантаження...
Інтерпретація: «На скільки в середньому помиляємося»

✅ MSE (Mean Squared Error)

Середня квадратична помилка
Формула: Завантаження...
Особливість: штрафує великі помилки

✅ R² (Коефіцієнт детермінації)

Частка поясненої варіації
Діапазон: 0–1 (чим більше — тим краще)
Інтерпретація: Завантаження... → модель пояснює 85% даних

✅ Градієнтний спуск

Алгоритм оптимізації параметрів
Формула: Завантаження...
Ключовий параметр: Завантаження... (learning rate)

✅ Функція втрат

Міра помилки моделі (MSE)
Формула: Завантаження...
Мета: мінімізувати

✅ Множинна регресія

Завантаження... ознак → 1 передбачення
Формула: Завантаження...
Геометрія: гіперплощина

Вітаємо з завершенням модуля «Лінійна регресія»! 🎉

Copyright © 2026