Линейная регрессия как базовая модель

Формула, геометрический смысл, PHP-реализация.

Линейная регрессия – это та точка, с которой удобно начинать разговор про машинное обучение. Не потому, что она "простая", а потому, что в ней уже есть почти всё.

Здесь уже появляются ключевые элементы машинного обучения:

  • модель как функция

  • параметры

  • ошибка

  • оптимизация

  • геометрический смысл

Если понять линейную регрессию, дальше большинство моделей будут восприниматься как её усложнения.

Идея модели

Представим, что у нас есть данные: входы и правильные ответы. Например, площадь квартиры xx и её цена yy. Мы хотим научиться по входу xx предсказывать значение yy.

Линейная регрессия предполагает, что зависимость можно аппроксимировать линейной функцией:

y^=wx+b\hat{y} = w \cdot x + b
circle-info

Линейная регрессия не была изобретена в одной работе. Её основы связаны с методом наименьших квадратов, который независимо разработали Карл Фридрих Гауссarrow-up-right и Адриен-Мари Лежандрarrow-up-right в начале XIX века. Изначально метод применялся в астрономии для обработки наблюдений.

Это обычное уравнение прямой на плоскости.

Здесь:

  • xx – входной признак

  • ww – коэффициент (вес)

  • bb – смещение (bias, свободный член)

  • y^\hat{y} – предсказание модели

Если признаков несколько, формула обобщается:

y^=w1x1+w2x2++wnxn+b\hat{y} = w_1 \cdot x_1 + w_2 \cdot x_2 + \dots + w_n \cdot x_n + b

Или в векторной форме, которая важна для ML:

y^=wx+b\hat{y} = \mathbf{w} \cdot \mathbf{x} + b

Здесь w\mathbf{w} и x\mathbf{x} – векторы, а точка означает скалярное произведение.

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

Ошибка и функция потерь

Модель сама по себе ничего не означает, пока мы не определили, что такое "хорошо" и "плохо" (для нас, разумеется). Для этого введём понятие ошибки.

Для одного объекта ошибка выглядит так:

e=yy^e = y - \hat{y}

Строго говоря, величина ee называется остатком (residual), а функция, которую мы оптимизируем (чуть ниже мы о ней поговорим), называется функцией потерь.

Но оптимизировать просто ошибку неудобно – как мы уже говорили в предыдущей главе положительные и отрицательные значения будут взаимно уничтожаться. Поэтому в классической линейной регрессии почти всегда используют квадратичную ошибку:

L=(yy^)2L = (y - \hat{y})^2

А для всего датасета – среднеквадратичную ошибку (MSE):

MSE=1ni=1n(yiy^i)2MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2

Чем меньше значение MSE, тем точнее модель предсказывает данные. Именно эту величину мы будем минимизировать, подбирая параметры ww и bb.

Геометрический смысл

Геометрия – ключ к пониманию линейной регрессии.

Один признак – прямая

Если у нас один признак, то данные – это точки на плоскости (x,y)(x, y). Модель – это прямая. Обучение линейной регрессии означает поиск такой прямой, которая проходит "как можно ближе" к этим точкам. Близость измеряется суммой квадратов ошибок.

11.1 Точки данных и аппроксимирующая прямая, которая минимизирует сумму квадратов вертикальных отклонений

Вертикальные отрезки от точек до прямой – это и есть ошибки предсказания.

Несколько признаков – плоскость и гиперплоскость

Если признаков два, модель становится плоскостью. Если признаков больше – гиперплоскостью в многомерном пространстве.

Вектор w\mathbf{w} задаёт ориентацию этой плоскости (наклон в пространстве), а bb – её сдвиг.

Предсказание y^\hat{y} – это значение линейной функции. Геометрически его можно интерпретировать как проекцию вектора признаков xx на направление вектора весов w\mathbf{w}, с учётом смещения bb.

С этой точки зрения линейная регрессия – это задача подбора такого направления в пространстве признаков, которое лучше всего объясняет данные.

11.2 Векторы x, w и проекция на направление w

Как находятся веса

Существует два основных подхода:

  1. Аналитическое решение через нормальные уравнения

  2. Итеративная оптимизация (градиентный спуск)

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

Градиентный спуск – интуитивно

Идея простая: представим, что функция потерь – это поверхность. Мы стоим в случайной точке и хотим спуститься в самую низкую.

Градиент показывает направление наибольшего роста функции. Если идти в противоположную сторону, ошибка будет уменьшаться.

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

Lw=2x(yy^)\frac{\partial L}{\partial w} = -2 x (y - \hat{y})
Lb=2(yy^)\frac{\partial L}{\partial b} = -2 (y - \hat{y})

Эти производные показывают, как изменение параметров влияет на ошибку.

Обновление параметров выглядит так:

w:=wηLww := w - \eta \cdot \frac{\partial L}{\partial w}
b:=bηLbb := b - \eta \cdot \frac{\partial L}{\partial b}

Где η\eta – learning rate, шаг обучения.

На каждом шаге параметры немного сдвигаются в сторону уменьшения ошибки.

11.3 Поверхность ошибки и шаги градиентного спуска

Почему линейная регрессия так важна

Линейная регрессия кажется простой, но она задаёт фундаментальную схему обучения моделей:

  • формирует базовый шаблон "модель" → "ошибка" → "оптимизация"

  • показывает геометрический смысл обучения

  • учит мыслить векторами и пространствами

  • напрямую связана с нейросетями (один нейрон без активации – это линейная модель)

Фактически, каждый линейный слой в нейросети – это обобщение линейной регрессии. Разница лишь в количестве слоёв и нелинейностях между ними.

Если вы смогли понять, что происходит здесь, вы уже понимаете одну из важнейших частей машинного обучения – независимо от языка программирования, фреймворка или модной библиотеки.

В следующих главах мы усложним картину и поговорим о том, почему линейности часто недостаточно и как появляются нелинейные модели.

Last updated