Модуль: Линейная регрессия


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


Machine Learning · Теория

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

Алгоритм, который предсказывает число — площадь, цену, температуру, зарплату — проводя «лучшую возможную» прямую через облако точек.

Сложность. начинающий Время. 25–30 минут Требуется. школьная алгебра

01 — ВведениеЗачем нужна регрессия

Представьте, что вы агент недвижимости. Вам показывают квартиру площадью 73 м² и спрашивают: «Сколько она стоит?» В голове у вас уже сложилось правило: примерно столько-то рублей за квадратный метр, плюс надбавка за район, минус скидка за этаж. Это и есть линейная модель — только вместо интуиции у нас будет математика, а вместо опыта риелтора — данные.

Линейная регрессия решает задачу предсказания числа по другим числам. Формально: у нас есть набор примеров — таблица, где каждой строке-объекту соответствует числовая метка. Мы хотим научиться предсказывать эту метку для новых, ранее не виданных объектов.

Примеры задач
  • Цена квартиры — по площади, числу комнат, этажу, году постройки.
  • Расход топлива автомобиля — по массе, объёму двигателя, мощности.
  • Зарплата — по опыту, образованию, размеру компании.
  • Урожайность поля — по количеству осадков, удобрений, солнечных дней.

Общее у всех этих задач — предсказываем непрерывное число. Это отличает регрессию от классификации, где мы предсказываем категорию («кот или собака», «спам или не спам»).

Линейная регрессия проводит прямую
через облако точек так, чтобы суммарная
ошибка предсказания была минимальной.

02 — ИнтуицияЛучшая прямая

Начнём с самого простого случая: один признак $x$ (например, площадь) и одна целевая переменная $y$ (цена). Нанесём на график несколько проданных квартир:

площадь (м²) → ↑ цена лучшая прямая кандидат №2 кандидат №3
Через одно и то же облако точек можно провести множество прямых — нам нужна «самая близкая ко всем сразу»

Через эти точки можно провести бесконечно много прямых. Какая из них лучшая? Интуитивно — та, что проходит «как можно ближе» ко всем точкам сразу. Чтобы превратить интуицию в алгоритм, нам нужно:

  1. Записать прямую формулой с параметрами, которые можно крутить.
  2. Договориться о том, что значит «близко» — выбрать функцию потерь.
  3. Найти такие параметры, при которых потеря минимальна.

03 — МодельМатематическая форма

Прямую на плоскости задают двумя числами: наклоном $w$ и сдвигом $b$. Простая линейная регрессия выглядит так:

$\hat{y} = w \cdot x + b$ $\hat{y}$ — предсказание, $x$ — признак, $w$ — наклон (вес), $b$ — смещение

Здесь $\hat{y}$ (читается «игрек с крышкой») — это предсказание модели для входа $x$, в отличие от реального $y$, которое мы знаем только для обучающих примеров. Параметр $w$ называют весом (или коэффициентом, slope), $b$ — смещением (intercept, свободный член).

Смысл параметров

$w$ отвечает на вопрос: «На сколько изменится цена, если площадь увеличить на 1 м²?» $b$ — это формальная «цена квартиры площадью 0 м²»: число, нужное для математики, но обычно не имеющее физического смысла.

В реальности признаков больше одного. Если у нас $n$ признаков $x_1, x_2, \ldots, x_n$ (площадь, число комнат, этаж, …), модель обобщается естественным образом:

$\hat{y} = w_1 x_1 + w_2 x_2 + \ldots + w_n x_n + b$

В матричной записи это выглядит компактнее. Если $\mathbf{x} = (x_1, \ldots, x_n)$ — вектор признаков, а $\mathbf{w} = (w_1, \ldots, w_n)$ — вектор весов, то:

$\hat{y} = \mathbf{w}^\top \mathbf{x} + b$

Слово «линейная» в названии означает именно это: предсказание — линейная функция признаков. Никаких $x^2$, $\sin(x)$ или $\sqrt{x}$ в самой модели нет. (Хотя ничто не мешает заранее посчитать $x^2$ и подать его как новый признак — это называется полиномиальные признаки.)

04 — ПотеряСреднеквадратичная ошибка

Чтобы алгоритм мог сравнить две прямые и выбрать ту, что «лучше», нам нужна метрика. Стандартный выбор для регрессии — среднеквадратичная ошибка (Mean Squared Error, MSE):

$\text{MSE}(w, b) = \dfrac{1}{n} \sum_{i=1}^{n} \bigl(y_i - (w x_i + b)\bigr)^2$ среднее квадратов отклонений реальных значений от предсказанных

Что мы здесь делаем:

  1. Для каждой точки $(x_i, y_i)$ считаем остаток $r_i = y_i - \hat{y}_i$ — на сколько модель промахнулась.
  2. Возводим в квадрат: это убирает знак (промах вверх и вниз штрафуются одинаково) и наказывает большие ошибки сильнее маленьких.
  3. Усредняем по всем точкам, чтобы число не зависело от размера выборки.

Задача обучения формулируется так: найти такие $w$ и $b$, при которых $\text{MSE}(w, b)$ минимальна. Покрутите слайдеры ниже и понаблюдайте, как меняется MSE.

Интерактив · покрутите параметры прямой

x · площадь ↑ y · цена
MSE
RMSE
сумма квадратов остатков

Красные полосы — это остатки $r_i = y_i - \hat{y}_i$ для каждой точки. Чем меньше их суммарная «площадь квадратов», тем лучше прямая.

Если вы поиграли со слайдерами, то заметили: для каждой пары $(w, b)$ есть единственное значение MSE. Это функция от двух переменных, и её поверхность имеет ровно один минимум — параболический «таз». Этот факт делает линейную регрессию необычно дружелюбной: у задачи есть единственное решение и алгоритмы его гарантированно находят.

05 — РешениеКак найти минимум

Есть два способа найти оптимальные $w$ и $b$.

Аналитический · нормальное уравнение

Так как функция $\text{MSE}(w, b)$ — обычная парабола, её минимум находится приравниванием производных к нулю. Для матричной формы решение записывается одной красивой формулой:

$\mathbf{w}^* = (\mathbf{X}^\top \mathbf{X})^{-1} \mathbf{X}^\top \mathbf{y}$ точное решение методом наименьших квадратов через обращение матрицы

Именно её под капотом и использует LinearRegression из sklearn для не слишком больших данных. Способ точный, но требует обращения матрицы, что становится дорого при тысячах признаков.

Итеративный · градиентный спуск

Когда данных или признаков очень много, проще спускаться к минимуму шагами. Идея: на каждом шаге мы смотрим, в какую сторону функция убывает быстрее всего (это направление антиградиента), и делаем маленький шажок туда.

$w \leftarrow w - \eta \cdot \dfrac{\partial \text{MSE}}{\partial w}, \quad b \leftarrow b - \eta \cdot \dfrac{\partial \text{MSE}}{\partial b}$ $\eta$ — скорость обучения, размер шага

Параметр $\eta$ называют скоростью обучения. Слишком маленькая — будем спускаться вечно; слишком большая — будем перескакивать через минимум и расходиться.

Анимация · градиентный спуск

x ↑ y шаг 0
w
b
MSE

Попробуйте сильно увеличить $\eta$ — увидите, как алгоритм «расходится» и улетает за пределы экрана.

06 — МетрикиКачество модели

После обучения мы хотим оценить, насколько хороша получившаяся модель. Используют несколько метрик — каждая отвечает на свой вопрос.

MSE и RMSE

MSE — то же, что мы минимизировали. Проблема в её интерпретации: если $y$ измерялось в рублях, то $\text{MSE}$ — в рублях в квадрате, что бессмысленно. Поэтому чаще смотрят на RMSE (Root MSE) — корень из MSE.

$\text{RMSE} = \sqrt{\dfrac{1}{n} \sum_i (y_i - \hat{y}_i)^2}$ средняя ошибка в тех же единицах, что и целевая переменная

MAE

Средняя абсолютная ошибка: модули вместо квадратов. Менее чувствительна к выбросам, тоже в тех же единицах, что $y$.

$\text{MAE} = \dfrac{1}{n} \sum_i |y_i - \hat{y}_i|$

Коэффициент детерминации $R^2$

Самая популярная метрика для регрессии — она безразмерна и легко интерпретируется. Формула:

$R^2 = 1 - \dfrac{\sum_i (y_i - \hat{y}_i)^2}{\sum_i (y_i - \bar{y})^2}$ доля разброса $y$, объяснённого моделью

В числителе — ошибка нашей модели. В знаменателе — ошибка «глупой» базовой модели, которая всегда предсказывает среднее $\bar{y}$.

Значение R² Что значит
$R^2 = 1$ идеальное предсказание, модель попадает в каждую точку
$R^2 = 0$ модель не лучше предсказания средним
$R^2 \lt 0$ модель хуже, чем константное предсказание
$R^2 = 0.7$ модель объясняет 70% разброса целевой переменной

07 — ОграниченияКогда не работает

Линейная регрессия — мощный, но требовательный инструмент. Она хорошо работает, когда выполняются (хотя бы приближённо) несколько предположений.

① Линейность связи

Связь между признаками и целевой переменной действительно близка к линейной. Если истинная зависимость выглядит как $y = x^2$, прямая её плохо приблизит. Решение: добавить нелинейные признаки или использовать другие модели.

② Независимость наблюдений

Строки в датасете не должны быть скоррелированы между собой. Особенно это важно для временных рядов — там обычно нужны специальные методы.

③ Гомоскедастичность остатков

Разброс остатков должен быть примерно одинаковым по всему диапазону $x$. Если для больших $x$ ошибка систематически больше, это гетероскедастичность — сигнал, что нужна другая модель или преобразование $y$ (например, $\log y$).

④ Отсутствие мультиколлинеарности

Если два признака почти полностью дублируют друг друга (например, «цена в рублях» и «цена в долларах»), решение нормального уравнения становится неустойчивым: маленькие изменения в данных дают огромные скачки в коэффициентах. Лечится регуляризацией — Ridge или Lasso регрессией.

⑤ Чувствительность к выбросам

Квадрат в MSE означает, что одна-единственная точка с большой ошибкой может «утянуть» прямую. Перед обучением полезно посмотреть на данные глазами и решить, что делать с выбросами.

Помните

Линейная регрессия не «знает», что она не подходит к вашим данным. Она всегда вернёт какую-то прямую — даже там, где это бессмысленно. Поэтому всегда смотрите на данные и проверяйте остатки после обучения.

У линейной регрессии всегда есть
единственное оптимальное решение —
и его можно найти точно.
конец теории · теперь — практика в Python