Линейная регрессия как базовая модель
Формула, геометрический смысл, PHP-реализация.
Линейная регрессия – это та точка, с которой удобно начинать разговор про машинное обучение. Не потому, что она "простая", а потому, что в ней уже есть почти всё.
Здесь уже появляются ключевые элементы машинного обучения:
модель как функция
параметры
ошибка
оптимизация
геометрический смысл
Если понять линейную регрессию, дальше большинство моделей будут восприниматься как её усложнения.
Идея модели
Представим, что у нас есть данные: входы и правильные ответы. Например, площадь квартиры x и её цена y. Мы хотим научиться по входу x предсказывать значение y.
Линейная регрессия предполагает, что зависимость можно аппроксимировать линейной функцией:
Линейная регрессия не была изобретена в одной работе. Её основы связаны с методом наименьших квадратов, который независимо разработали Карл Фридрих Гаусс и Адриен-Мари Лежандр в начале XIX века. Изначально метод применялся в астрономии для обработки наблюдений.
Это обычное уравнение прямой на плоскости.
Здесь:
x – входной признак
w – коэффициент (вес)
b – смещение (bias, свободный член)
y^ – предсказание модели
Если признаков несколько, формула обобщается:
Или в векторной форме, которая важна для машинного обучения:
Здесь w и x – векторы, а точка означает скалярное произведение.
На самом деле, векторная форма – это не новая модель, а просто более удобная запись той же самой суммы.
Разберём, как именно происходит этот переход.
Развёрнутая форма
Мы уже видели, что модель можно записать так:
Это означает, что модель:
умножает каждый признак xj на свой вес w^j
складывает все результаты
добавляет свободный член w^0
То есть это просто сумма взвешенных признаков.
Как появляется скалярное произведение
Теперь перепишем эту же формулу через векторы.
Добавим фиктивный признак, равный единице:
Тогда их скалярное произведение:
даёт:
Это в точности та же самая сумма, что и выше.
Символ ⊤ (читается "транспонирование") означает, что вектор или матрицу переворачивают – строки становятся столбцами и наоборот. Это нужно, чтобы корректно выполнить умножение: строка на столбец даёт одно число – именно то, что нам и нужно для предсказания.
Именно поэтому вся линейная модель компактно записывается как одно скалярное произведение.
Связь с предыдущей записью
Поэтому записи
и
– эквивалентны.
Во втором случае смещение b просто "вшито" в вектор весов через добавленную единицу в x.
Зачем это нужно
Такая запись используется потому что она:
компактнее
естественно обобщается на матрицы (например, Xw для всего датасета)
удобна для вычислений и оптимизации
Коротко:
Это одна и та же модель – просто записанная по-разному:
слева – поэлементно
справа – векторно
Таким образом, подытожив, можно сказать, что модель отвечает на вопрос: какие веса нужно подобрать, чтобы линейная комбинация признаков как можно лучше совпадала с реальными данными.
Ошибка и функция потерь
Модель сама по себе ничего не означает, пока мы не определили, что такое "хорошо" и "плохо" (для нас, разумеется). Для этого введём понятие ошибки.
Для одного объекта ошибка выглядит так:
Строго говоря, величина e называется остатком (residual), а функция, которую мы оптимизируем (чуть ниже мы о ней поговорим), называется функцией потерь.
Но оптимизировать просто ошибку неудобно – как мы уже говорили в предыдущей главе положительные и отрицательные значения будут взаимно уничтожаться. Поэтому в классической линейной регрессии почти всегда используют квадратичную ошибку:
А для всего датасета – среднеквадратичную ошибку (MSE):
Чем меньше значение MSE, тем точнее модель предсказывает данные. Именно эту величину мы будем минимизировать, подбирая параметры w и b.
Геометрический смысл
Геометрия – ключ к пониманию линейной регрессии.
Один признак – прямая
Если у нас один признак, то данные – это точки на плоскости (x,y). Модель – это прямая. Обучение линейной регрессии означает поиск такой прямой, которая проходит "как можно ближе" к этим точкам. Близость измеряется суммой квадратов ошибок.

Вертикальные отрезки от точек до прямой – это и есть ошибки предсказания.
Несколько признаков – плоскость и гиперплоскость
Если признаков два, модель становится плоскостью. Если признаков больше – гиперплоскостью в многомерном пространстве.
Вектор w задаёт ориентацию этой плоскости (наклон в пространстве), а b – её сдвиг.
Предсказание y^ – это значение линейной функции. Геометрически его можно интерпретировать как проекцию вектора признаков x на направление вектора весов w, с учётом смещения b.
С этой точки зрения линейная регрессия – это задача подбора такого направления в пространстве признаков, которое лучше всего объясняет данные.

Как находятся веса
Существует два основных подхода:
Аналитическое решение (через нормальные уравнения)
Итеративная оптимизация (градиентный спуск)
В прикладном ML чаще используется второй подход, потому что он масштабируется и логически совпадает с тем, как обучаются нейросети.
Аналитическое решение
То же самое выражение для ошибки удобно записывать в матричном виде. Если собрать все объекты в матрицу признаков X, а ответы – в вектор y, модель можно записать как:
Тогда функция потерь принимает вид:
Это та же самая сумма квадратов ошибок, только записанная компактно.
Что мы минимизируем
Раскроем норму:
Берём производную
Раскрывая скобки, получаем:
Теперь продифференцируем по w:
w⊤X⊤Xw→2X⊤Xw
−2y⊤Xw→−2X⊤y
y⊤y→0
Итого:
Приравниваем к нулю
Минимум достигается, когда градиент равен нулю:
Сокращая на 2, получаем:
Это и есть нормальные уравнения.
Решение
Если матрица X⊤X обратима, решение записывается как:
Когда решение существует
Матрица X⊤X должна быть обратимой. Если признаки линейно зависимы, она становится вырожденной, и:
обратной матрицы не существует
решение либо не единственное, либо не определено
Интуитивно
X⊤X отражает, как признаки связаны между собой
X⊤y – как признаки связаны с ответами
решение подбирает веса так, чтобы ошибка была минимальной
Коротко:
– это аналитическое решение задачи линейной регрессии.
Регуляризация: Ridge и Lasso
На практике аналитическое решение не всегда ведёт себя хорошо: модель может переобучаться или становиться нестабильной.
Один из способов это исправить – добавить регуляризацию.
Ridge-регрессия (L2)
В Ridge-регрессии к функции ошибки добавляется штраф на величину весов:
Здесь второй член – это L2-норма:
Это означает, что большие значения весов штрафуются.
Что это даёт
веса становятся меньше по величине
модель становится более устойчивой
уменьшается переобучение
При этом веса уменьшаются плавно, но не обнуляются.
Решение для Ridge
В этом случае аналитическое решение немного меняется:
Добавка λI делает матрицу устойчивой и гарантирует существование решения (то есть гарантирует, что матрица не станет вырожденной и решение просто "схлопывается").
Сравнение с Lasso
Существует другой тип регуляризации – L1:
Он используется в Lasso-регрессии.
Главное отличие:
L2 (Ridge) – сглаживает веса
L1 (Lasso) – может занулять веса (выполняет отбор признаков)
Коротко:
Ridge = L2-регуляризация
Lasso = L1-регуляризация
Итеративная оптимизация (градиентный спуск)
Идея простая: представим, что функция потерь – это поверхность. Мы стоим в случайной точке и хотим спуститься в самую низкую.
Градиент показывает направление наибольшего роста функции. Если идти в противоположную сторону, ошибка будет уменьшаться.
Для линейной регрессии производные считаются просто. Для наглядности запишем производные для одного объекта. В случае всего датасета градиенты усредняются по всем примерам.
Эти производные показывают, как изменение параметров влияет на ошибку.
Обновление параметров выглядит так:
Где η – learning rate, шаг обучения.
На каждом шаге параметры немного сдвигаются в сторону уменьшения ошибки.

Аналитическое решение vs градиентный спуск
Возникает естественный вопрос: если существует точная формула решения, зачем тогда нужен градиентный спуск?
Короткий ответ
Формула
используется потому что она:
даёт точное решение
не требует подбора гиперпараметров
работает быстро на небольших задачах
Но она плохо масштабируется.
Когда формула – хороший выбор
Аналитическое решение удобно, если:
данных немного (тысячи, а не миллионы)
число признаков невелико
важно получить точный ответ без настройки
Например:
учебные задачи
статистический анализ
небольшие датасеты
Почему она не масштабируется
Основная проблема – обращение матрицы:
Это операция с вычислительной сложностью порядка: O(n3)
Поэтому:
при небольших размерах – всё работает быстро
при больших – становится слишком дорого
Почему её всё равно изучают
Несмотря на это, формула важна:
даёт точное решение (глобальный минимум)
помогает понять структуру задачи
служит ориентиром для проверки других методов
Как делают на практике
малые данные → аналитическое решение
средние → зависит от задачи
большие → градиентный спуск / SGD
Коротко:
аналитическое решение — теоретически точное
градиентный спуск — практический инструмент для больших данных
Почему линейная регрессия так важна
Линейная регрессия кажется простой, но она задаёт фундаментальную схему обучения моделей:
формирует базовый шаблон "модель" → "ошибка" → "оптимизация"
показывает геометрический смысл обучения
учит мыслить векторами и пространствами
напрямую связана с нейросетями (один нейрон без активации – это линейная модель)
Фактически, каждый линейный слой в нейросети – это обобщение линейной регрессии. Разница лишь в количестве слоёв и нелинейностях между ними.
Если вы смогли понять, что происходит здесь, вы уже понимаете одну из важнейших частей машинного обучения – независимо от языка программирования, фреймворка или модной библиотеки.
В следующих главах мы усложним картину и поговорим о том, почему линейности часто недостаточно и как появляются нелинейные модели.
Last updated