Когда студент впервые видит линейную регрессию, ему обычно показывают одну красивую формулу, потом функцию ошибки, а затем — пару строк на Python. Из-за этого создаётся иллюзия, что вся тема очень простая: есть данные, есть модель, есть MSE, и somehow библиотека сама находит коэффициенты.

Но в реальной Data Science-практике важен не только сам факт, что мы минимизируем MSE. Намного важнее понимать, каким способом мы это делаем. Один и тот же объект — линейная регрессия — может решаться через разные солверы. И вот здесь начинается настоящая инженерия: один метод быстрее, другой устойчивее, третий лучше работает на больших разреженных матрицах, четвёртый полезен, когда данные плохо обусловлены.

Поэтому вопрос “какие солверы нужно знать” — это не вопрос списка названий. Это вопрос понимания, как одна и та же задача MSE связана с линейной алгеброй, геометрией и оптимизацией.


С чего вообще начинается линейная регрессия

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

Раздел математики: линейная алгебра и математическая статистика

Линейная модель:

$$ \hat{y} = Xw $$

Обозначения:

  • \(\hat{y}\) — вектор предсказаний модели;
  • \(X\) — матрица признаков, где строки — объекты, а столбцы — признаки;
  • \(w\) — вектор параметров модели, то есть искомые коэффициенты.

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

Геометрически каждая строка матрицы \(X\) — это точка в пространстве признаков. А линейная регрессия пытается выбрать такой вектор коэффициентов \(w\), чтобы предсказания были максимально близки к реальным значениям.


Почему всё крутится вокруг MSE

Нам мало просто записать модель. Нужно ещё понять, что считать хорошими коэффициентами. Для этого в линейной регрессии чаще всего используют среднеквадратичную ошибку.

Раздел математики: математическая статистика

Функция ошибки MSE:

$$ MSE(w) = \frac{1}{n}\|Xw - y\|_2^2 $$

Обозначения:

  • \(MSE(w)\) — среднеквадратичная ошибка как функция параметров модели;
  • \(n\) — количество объектов в выборке;
  • \(Xw\) — вектор предсказаний модели;
  • \(y\) — вектор истинных значений целевой переменной;
  • \(Xw - y\) — вектор ошибок предсказания;
  • \(\| \cdot \|_2^2\) — квадрат евклидовой нормы, то есть сумма квадратов компонент.

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

Если говорить геометрически, то мы ищем точку в пространстве параметров, в которой расстояние между предсказаниями и реальными данными минимально. Поэтому задача линейной регрессии с MSE — это задача наименьших квадратов.


Первое, что нужно понять: солвер — это способ добраться до минимума

Очень полезно отделить две идеи:

  • MSE задаёт что мы минимизируем;
  • солвер задаёт как мы до этого минимума добираемся.

Именно здесь многие путаются. Им кажется, что линейная регрессия — это и есть один алгоритм. На самом деле постановка задачи одна, а путей решения несколько. И если вы понимаете солверы, вы начинаете мыслить как инженер, а не как пользователь одной кнопки fit().


Нормальные уравнения: самый известный старт

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

Раздел математики: линейная алгебра и оптимизация

Нормальные уравнения:

$$ X^{T}Xw = X^{T}y $$

Обозначения:

  • \(X^{T}\) — транспонированная матрица признаков;
  • \(X^{T}X\) — матрица Грама, описывающая взаимное устройство признаков;
  • \(w\) — искомый вектор коэффициентов;
  • \(X^{T}y\) — проекция целевой переменной на пространство признаков.

Эта система получается после взятия производной от MSE по параметрам и приравнивания её к нулю. Она показывает, где находится стационарная точка задачи наименьших квадратов.

Если матрица \(X^{T}X\) обратима, можно записать решение явно.

Раздел математики: линейная алгебра

Явное решение:

$$ w = (X^{T}X)^{-1}X^{T}y $$

Обозначения:

  • \((X^{T}X)^{-1}\) — обратная матрица к матрице Грама;
  • \(X^{T}y\) — вектор правой части системы;
  • \(w\) — коэффициенты, минимизирующие MSE.

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

Что здесь нужно запомнить: нормальные уравнения полезны как идея и как математический фундамент, но не как лучший вычислительный инструмент для серьёзных данных.


Cholesky: быстрый путь, когда матрица ведёт себя хорошо

Если матрица \(X^{T}X\) симметрична и положительно определена, её можно разложить через Cholesky. В линейной регрессии это часто даёт быстрый способ решить нормальные уравнения без явного обращения матрицы.

Раздел математики: линейная алгебра

Разложение Cholesky:

$$ X^{T}X = LL^{T} $$

Обозначения:

  • \(X^{T}X\) — симметричная матрица Грама;
  • \(L\) — нижняя треугольная матрица разложения;
  • \(L^{T}\) — транспонированная к ней верхняя треугольная матрица.

Это разложение нужно затем, чтобы заменить одну сложную систему на две более простые треугольные системы. Такой подход быстрее прямого обращения матрицы.

Интуитивно Cholesky — это история про аккуратную упаковку квадратичной формы. Но есть важная инженерная оговорка: если признаки сильно коррелируют или матрица почти вырождена, устойчивость падает. Поэтому знать Cholesky полезно, но считать его универсальным ответом нельзя.


QR-разложение: один из самых здоровых солверов для практики

Если говорить о том, какой солвер очень полезно понимать именно для Data Science, то QR — один из лучших кандидатов. Он решает задачу наименьших квадратов более устойчиво, чем работа через \(X^{T}X\).

Раздел математики: линейная алгебра

QR-разложение:

$$ X = QR $$

Обозначения:

  • \(X\) — матрица признаков;
  • \(Q\) — матрица с ортонормированными столбцами;
  • \(R\) — верхняя треугольная матрица.

QR-разложение полезно потому, что оно переводит задачу из исходной системы в более удобную треугольную форму, не усиливая численные проблемы так сильно, как это делает переход к \(X^{T}X\).

Геометрически QR очень красив: матрица \(Q\) строит ортонормированный базис в пространстве столбцов матрицы \(X\). То есть мы как будто сначала наводим порядок в системе координат, а потом уже решаем задачу. Именно поэтому QR — это не просто “ещё один солвер”, а способ сделать геометрию задачи прозрачнее.

Если данные плотные и размер задачи умеренный, QR часто является очень здоровым выбором.


SVD: солвер, который нужно знать глубже остальных

Если бы нужно было оставить студенту только один по-настоящему стратегический солвер для понимания линейной регрессии, я бы выбрал SVD. Потому что SVD не только решает задачу, но и объясняет, почему задача может быть нестабильной.

Раздел математики: линейная алгебра

SVD-разложение:

$$ X = U\Sigma V^{T} $$

Обозначения:

  • \(X\) — матрица признаков;
  • \(U\) — матрица левых сингулярных векторов;
  • \(\Sigma\) — диагональная матрица сингулярных значений;
  • \(V^{T}\) — транспонированная матрица правых сингулярных векторов.

Это разложение разбирает матрицу на направления и масштабы. Именно поэтому SVD особенно важен, когда признаки плохо обусловлены, коррелированы или когда система близка к вырожденной.

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

Геометрически SVD показывает, как матрица \(X\) растягивает и сжимает пространство. Если в каком-то направлении растяжение почти нулевое, модель плохо различает изменения в этом направлении. Именно поэтому SVD — это лучший солвер для понимания нестабильности MSE-решения.


Градиентный спуск: когда задача становится задачей оптимизации

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

Раздел математики: математический анализ и оптимизация

Шаг градиентного спуска:

$$ w_{t+1} = w_t - \eta \nabla MSE(w_t) $$

Обозначения:

  • \(w_t\) — текущий вектор параметров на шаге \(t\);
  • \(w_{t+1}\) — параметры после обновления;
  • \(\eta\) — скорость обучения;
  • \(\nabla MSE(w_t)\) — градиент MSE по параметрам модели в текущей точке.

Эта формула используется, когда мы не хотим или не можем решать задачу напрямую через разложения матриц. Она особенно важна для больших задач, онлайн-обучения и как концептуальный мост к более сложным ML-моделям.

Интуитивно градиентный спуск — это способ двигаться к минимуму MSE маленькими шагами. Он проигрывает точным линейно-алгебраическим решениям в элегантности, но выигрывает в универсальности: именно этот стиль мышления нужен потом для логистической регрессии, нейронных сетей и deep learning.

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


SGD и mini-batch: когда данных много и они приходят потоком

Если выборка огромная, полный градиент считать дорого. Тогда используют стохастические варианты — SGD и mini-batch gradient descent. Их нужно знать не как главную классику для OLS, а как практическое продолжение градиентной идеи.

Здесь MSE минимизируется не по всей выборке сразу, а по одному объекту или небольшому батчу. Это делает шаги шумными, но быстрыми. В реальном мире это важно, когда данные большие, разреженные или обновляются постоянно.

Если совсем кратко: обычный gradient descent учит вас понимать оптимизацию, а SGD учит вас понимать инженерные ограничения.


LSQR и итерационные солверы для больших разреженных задач

Есть ещё одна категория солверов, которую полезно знать хотя бы концептуально, — методы для больших разреженных систем. Среди них один из ключевых — LSQR. Он особенно важен, когда матрица признаков огромная и хранить плотные разложения дорого.

LSQR не пытается явно строить обратные матрицы или полные разложения. Он итеративно приближается к решению задачи наименьших квадратов и хорошо работает на sparse data. В обычной стартовой Data Science-практике вы можете не писать LSQR руками, но понимать, зачем он существует, нужно. Это солвер про масштаб и вычислительную экономику.


Какие солверы нужно знать обязательно, а какие — стратегически

Если говорить без академической пыли и по-честному, то для линейной регрессии с MSE есть такой порядок важности:

  • нормальные уравнения — как фундаментальная постановка;
  • QR — как здоровый и устойчивый практический солвер;
  • SVD — как лучший способ понимать нестабильность и плохую обусловленность;
  • Cholesky — как быстрый путь при хорошей структуре матрицы;
  • gradient descent — как мост к оптимизации в ML;
  • SGD / LSQR — как методы для больших и разреженных данных.

Если студент понимает только одну формулу обращения матрицы, он знает слишком мало. Если он понимает, почему QR устойчивее normal equations, зачем нужен SVD и почему gradient descent важен даже там, где есть точное решение, тогда он уже действительно понимает линейную регрессию.


Как это выглядит в Python

Ниже — простой пример линейной регрессии через Python. Он не показывает все солверы вручную, но полезен как напоминание: любая строчка кода здесь стоит на той математике, которую мы разобрали выше.

example.pyPython
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

X = np.array([
    [50, 2],
    [60, 3],
    [80, 4],
    [100, 5],
    [120, 6]
], dtype=float)

y = np.array([200, 250, 330, 410, 490], dtype=float)

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

y_pred = model.predict(X)
mse = mean_squared_error(y, y_pred)

print("weights:", model.coef_)
print("bias:", model.intercept_)
print("mse:", mse)

Что здесь важно понимать:

  • матрица \(X\) задаёт пространство признаков;
  • модель ищет параметры \(w\), минимизирующие MSE;
  • под капотом библиотека использует не “магический fit”, а конкретный численный способ решения задачи;
  • качество модели измеряется не по красоте кода, а по функции ошибки.

Главная мысль, которую стоит унести

Линейная регрессия — это хороший пример того, как в Data Science одна и та же задача может жить сразу в нескольких мирах. В мире статистики это MSE. В мире линейной алгебры это система нормальных уравнений и разложения матриц. В мире оптимизации это градиентный спуск. В мире Python это несколько строк кода.

Поэтому вопрос о солверах на самом деле проверяет не знание названий, а глубину понимания модели. Если вы понимаете, когда нужен QR, зачем нужен SVD, почему Cholesky бывает быстрым, а gradient descent — универсальным, значит вы уже видите линейную регрессию не как формулу из учебника, а как полноценную инженерную задачу.

И это как раз тот момент, когда Data Science перестаёт быть набором кнопок и начинает превращаться в систему мышления.