Когда студент впервые видит линейную регрессию, ему обычно показывают одну красивую формулу, потом функцию ошибки, а затем — пару строк на 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. Он не показывает все солверы вручную, но полезен как напоминание: любая строчка кода здесь стоит на той математике, которую мы разобрали выше.
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 перестаёт быть набором кнопок и начинает превращаться в систему мышления.