Все ML-инженеры знают о линейной регрессии. Это та самая база, с которой начинает изучение алгоритмов любой новичок. Но вот парадокс: даже многие «прожженные» инженеры не всегда до конца понимают ее истинную работу под капотом.

А именно — какая у «линейки» статистическая связь с Методом Максимального Правдоподобия (MLE) и почему она так сильно «любит» MSE и нормальное распределение. В этой статье мы как раз в этом и разберемся.

Освежаем в памяти Линейную регрессию

Линейная регрессия это как “Hello world” в мире классического машинного обучения.
Ее задача — предсказать целевую переменную (таргет) y как линейную комбинацию признаков (фичей) X.

\hat{y} = w_0 + w_1x_1 + w_2x_2 + ... + w_nx_n

Что бы все это работало модель делает два довольно сильных (и почти всегда невыполнимых на практике) предположения:

  • Линейность: Каждый признак x_i влияет на таргет y линейно

  • Независимость: Признаки влияют на таргет независимо друг от друга.

Плюсы:

  • Простота и интерпретируемость: Модель легко объяснить. «Увеличиваем фичу x_1на 1, таргет y меняется на w_1».

  • Скорость и минимум гиперпараметров: В ее классическом виде она не требует подбора гиперпараметров и имеет аналитическое решение. А с градиентным спуском обычно 1 гиперпараметр.

Минусы:

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

  • Проблема нелинейности: Эту проблему можно "поправить", если вручную добавлять нелинейные признаки (x^2, x_1 \cdot x_2, log(x)), но это уже ручная работа.

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

Метод максимального правдоподобия (Maximum Likelihood Estimation)

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

В случае линейки это выглядит вот так y_i = \mathbf{w}^T \mathbf{x}_i + \epsilon_i.

А теперь — главное предположение, на котором держится вся классическая регрессия
Мы предполагаем, что этот шум \epsilon_i распределен нормально.

То есть, мы верим, что ошибки \epsilon_i независимы, в среднем равны нулю

А раз линейное преобразование (y_i = (w_0 + w_1x_i) + \epsilon_i) — это просто сдвиг и масштабирование, а шум — «нормальный», то и наш таргет y_i тоже распределен нормально (вокруг предсказанной линии)

Откуда растут ноги?

У нас есть данные (X, Y) и крутое предположение о нормальности шума.
Теперь нам нужно каким - то образом подобрать лучшие параметры w_0 и w_1.

Тут-то нам и нужен "Метод максимального правдоподобия"

Этот метод позволяет найти такие параметры w, при которых вероятность(правдоподобие) наблюдать именно наши данные (X, Y) была бы максимальной.

Записывается это как функция правдоподобия L(\mathbf{w} | X, Y)

L(\mathbf{w} | X, Y) = P(X, Y | \mathbf{w})

Так как мы считаем, что все наши наблюдения (y_i) независимы друг от друга, мы можем расписать это «общее» правдоподобие как произведение правдоподобий для каждого отдельного объекта:

L(\mathbf{w} | X, Y) = \prod_{i} P(x_i, y_i | \mathbf{w})

Трюк с логарифмом

Тут возникает проблемка. Искать производную произведения очень тяжело и дорого. По этому мы делаем хитрый трюк, нам не нужно само значение, нам нужна максимизация. А argmax функции совпадает с argmax-ом логарифма этой функции, потому что логарифм - монотонное преобразование.

И по свойству логарифмов мы можем заменить произведение суммой логарифмов, а производную от суммы искать сильно легче)

Это называется Логарифм Правдоподобия (Log-Likelihood):

\log L(\mathbf{w} | X, Y) = \sum_{i} \log P(x_i, y_i | \mathbf{w}) \rightarrow \max

Так причем тут MSE

Чтобы это понять нам придется расписать по шагам все преобразования ММК.

Давайте распишем, чему равно P(x_i, y_i | \mathbf{w}). Выше мы предположили, что y_i распределен нормально. Вероятность P(y_i | ...)— это просто формула плотности нормального распределения

P(y_i | x_i, \mathbf{w}) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(y_i - (w_0 + w_1x_i))^2}{2\sigma^2}\right)

Теперь подставляем это в нашу формулу общего правдоподобия (произведение):

L(w_0, w_1, \sigma^2; Y) = \prod_{i=1}^{n} \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(y_i - (w_0 + w_1x_i))^2}{2\sigma^2}\right)

Не забываем про трюк с логарифмом, применяем логарифм на всю функцию, и в итоге получим:

\ell(\mathbf{w}) = -\frac{n}{2}\log(2\pi) - \frac{n}{2}\log(\sigma^2) - \frac{1}{2\sigma^2}\sum_{i=1}^{n}(y_i - (w_0 + w_1x_i))^2

Финал: Максимизация правдоподобия

Мы хотим найти w_0 и w_1, которые максимизируют эту штуку \ell(\mathbf{w}).
Чтобы найти точку максимума (или минимума) функции, нужно взять ее производную и приравнять к нулю
В нашем случае мы ищем argmax по \mathbf{w}, поэтому мы берем частные производные по w_0 и w_1 (или просто по вектору \mathbf{w}), то есть те члены где нет w производная будет равна нулю.

Что мы видим глядя на нашу фунцию?

  • Первый член (-\frac{n}{2}\log(2\pi)): Это константа. На поиск максимума не влияет. Выкидываем.

  • Второй член (-\frac{n}{2}\log(\sigma^2)): Это тоже константа (мы ищем \mathbf{w}, а не \sigma). Выкидываем.

  • Третий член (-\frac{1}{2\sigma^2}\sum_{i=1}^{n}(y_i - (w_0 + w_1x_i))^2): А вот он зависит от наших \mathbf{w}!

Смотрите: \frac{1}{2\sigma^2} — это просто положительная константа. Значит, чтобы максимизировать все выражение (которое стоит со знаком «минус»), нам нужно минимизировать то, что осталось:

\sum_{i=1}^{n}(y_i - (w_0 + w_1x_i))^2

У нас получилась SSE - сумма квадратов ошибок.
А минимизация SSE это тоже самое что и минимизация MSE так как MSE = \frac{1}{n} SSE

Вот и вся связь. Минимизировать MSE — это математически то же самое, что максимизировать правдоподобие (MLE), при условии, что мы изначально предположили, что ошибки в наших данных распределены по Гауссу (нормально).

Заключение

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

Комментарии (13)


  1. GospodinKolhoznik
    08.11.2025 20:04

    А argmax функции совпадает с argmax-ом логарифма этой функции, потому что логарифм - монотонное преобразование.

    x -> 2*ln(x) тоже монотонное преобразование. Но если применить его, то надо минимизировать не сумму квадратов, а сумму 4 степени отклонений.


  1. FemboyEnjoyer
    08.11.2025 20:04

    >почему мы минимизируем именно квадрат ошибки

    чтобы подогнать среднее, если же вместо среднего хотим получать как можно близкое к медиане - надо оптимизировать mae


    1. iShrimp
      08.11.2025 20:04

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

      Сумма модулей имеет глобальный минимум с негладкой окрестностью, что может замедлять сходимость. Но модуль менее чувствителен к выбросам данных.

      Что если ввести функцию, сочетающую лучшие свойства обеих? Например, sqrt(x^2 + a).


      1. F01D32
        08.11.2025 20:04

        Что если ввести функцию, сочетающую лучшие свойства обеих? Например, sqrt(x^2 + a).

        Есть функция потерь Хубера. В предложенном исполнении нужно добавить пару деталей, и тогда оно станет ее псевдо-версией.


  1. SheldonP
    08.11.2025 20:04

    "Мы хотим найти w_0 и w_1, которые максимизируют эту штуку \ell(\mathbf{w})"

    А что стало с остальными компонентами вектора, у которых номер больше 1? Печалька


    1. GidraVydra
      08.11.2025 20:04

      Ничего не стало. Предположение о независимости признаков позволяет нам независимо оптимизировать каждый сомножитель.


      1. Vkiniakin
        08.11.2025 20:04

        Они становятся зависимыми после получения данных.

        Там получается система уравнений, её нужно решить и посмотреть

        P.s. я сначала согласился, мол, с точки зрения симметрии они ж должеы быть независимы, а потом осознал глубину ошибки))


        1. GidraVydra
          08.11.2025 20:04

          В приближении, называемом линейной регрессией, они по определению независимые.


          1. Vkiniakin
            08.11.2025 20:04

            Позвольте объяснить, слово "по определению" здесь не катит. Есть модель того как появляются данные - это и есть "Дано", из чего мы и исходим. Далее идёт оптимизация MLE в ходе которой, они очевидно, зависят друг от друга.

            Возьмите третий член и найдите производные по w0 и w1. Приравняйте к нулю. Получите зависимость w0 от w1.


  1. Vkiniakin
    08.11.2025 20:04

    Помню эту задачку, только в учебнике она наоборот была. Нужно было найти точную формулу расчёта мат ожидания параметров, если даны x1,...xn и t1...tn.

    Поскольку максимальный член -квадратичен, это имеет точное решение через Лапласа.

    Если берём неправильный праер, равный 1, то E[teta|data] совпадает с teta argmax - это формула линейной регрессии. Но в чуть более общем случае нужно немного поковыряться с Гессианом, ТС слишком легко отделался...


  1. iShrimp
    08.11.2025 20:04

    Посоветуйте, пожалуйста, литературу по решению задач оптимизации на неполных данных. В сети много работ, в которых предлагают заполнять отсутствующие значения путём Expectation Maximisation (методом максимального правдоподобия), а какой алгоритм для этого лучше выбрать ?


    1. tbl
      08.11.2025 20:04

      SVD+LP. Но смотря, что оптимизировать надо.

      Я делал такое для пространства линейных функций в задаче расчета усредненной стоимости доставки для корзины товаров, возможные разбиения которой могут доставляться различными способами, которые может выбрать пользователь. Решал через метод наименьших квадратов, для этого строил систему уравнений частных первых производных. Эта система неполна в том смысле, что количество неизвестных больше, чем количество линейных уравнений. Ее решение искал с помощью псевдоинверсии на базе SVD.

      Получается решение, которое зависит от вектора свободных параметров некоторой размерности n (геометрически решение лежит на дне долины на поверхности квадратов разниц). Далее для уточнения этих случайных параметров решал задачу линейного программирования на фиксированной выбранной целевой функции (например, алгебраическая сумма стоимости всех выбранных комбинаций доставок должна быть минимальной, но можно придумать и другую линейную функцию) при заданных граничных условиях. Здесь был выбран симплекс-метод, хоть, он и экспоненциальный, но граничные условия были такими простыми (например, стоимость сумм доставок разбиения корзины больше либо равно 0), что получающийся многогранник в n-мерном пространстве был очень ограничен по количеству ребер, по которым надо пробежаться при поиске решения.

      Решение сделано на java, однопоточная калькуляция для корзины укладывалась в 50ms для 99.95 персентили, были использованы библиотеки ejml для SVD и apache commons math для ЛП


  1. Pshir
    08.11.2025 20:04

    Но вот парадокс: даже многие «прожженные» инженеры не всегда до конца понимают ее истинную работу под капотом.

    Прожжённые инженеры прогуливали пары по матстатистике, или сейчас в прожжённые инженеры уже берут всех подряд?