Все ML-инженеры знают о линейной регрессии. Это та самая база, с которой начинает изучение алгоритмов любой новичок. Но вот парадокс: даже многие «прожженные» инженеры не всегда до конца понимают ее истинную работу под капотом.
А именно — какая у «линейки» статистическая связь с Методом Максимального Правдоподобия (MLE) и почему она так сильно «любит» MSE и нормальное распределение. В этой статье мы как раз в этом и разберемся.
Освежаем в памяти Линейную регрессию
Линейная регрессия это как “Hello world” в мире классического машинного обучения.
Ее задача — предсказать целевую переменную (таргет) y как линейную комбинацию признаков (фичей) X.
Что бы все это работало модель делает два довольно сильных (и почти всегда невыполнимых на практике) предположения:
Линейность: Каждый признак
влияет на таргет
линейно
Независимость: Признаки влияют на таргет независимо друг от друга.
Плюсы:
Простота и интерпретируемость: Модель легко объяснить. «Увеличиваем фичу
на 1, таргет
меняется на
».
Скорость и минимум гиперпараметров: В ее классическом виде она не требует подбора гиперпараметров и имеет аналитическое решение. А с градиентным спуском обычно 1 гиперпараметр.
Минусы:
Наивность: На практике предположения о линейности и независимости почти никогда не выполняются. Задачи нелинейны (цена квартиры зависит не только от района И метро, но и от их комбинации), а признаки часто зависят друг от друга.
Проблема нелинейности: Эту проблему можно "поправить", если вручную добавлять нелинейные признаки (
,
,
), но это уже ручная работа.
Причина по которой используют не аналитическое решение, а только с градиентными методами, уже другая история
Метод максимального правдоподобия (Maximum Likelihood Estimation)
Важное уточнение, в любой ситуации с данными и прогнозами, всегда нужно держать в голове что есть какой - то шум . Обычно туда входит все то, что мы не учли при прогнозе.
В случае линейки это выглядит вот так .
А теперь — главное предположение, на котором держится вся классическая регрессия
Мы предполагаем, что этот шум распределен нормально.
То есть, мы верим, что ошибки независимы, в среднем равны нулю
А раз линейное преобразование — это просто сдвиг и масштабирование, а шум — «нормальный», то и наш таргет
тоже распределен нормально (вокруг предсказанной линии)
Откуда растут ноги?
У нас есть данные и крутое предположение о нормальности шума.
Теперь нам нужно каким - то образом подобрать лучшие параметры и
.
Тут-то нам и нужен "Метод максимального правдоподобия"
Этот метод позволяет найти такие параметры , при которых вероятность(правдоподобие) наблюдать именно наши данные
была бы максимальной.
Записывается это как функция правдоподобия
Так как мы считаем, что все наши наблюдения независимы друг от друга, мы можем расписать это «общее» правдоподобие как произведение правдоподобий для каждого отдельного объекта:
Трюк с логарифмом
Тут возникает проблемка. Искать производную произведения очень тяжело и дорого. По этому мы делаем хитрый трюк, нам не нужно само значение, нам нужна максимизация. А argmax функции совпадает с argmax-ом логарифма этой функции, потому что логарифм - монотонное преобразование.
И по свойству логарифмов мы можем заменить произведение суммой логарифмов, а производную от суммы искать сильно легче)
Это называется Логарифм Правдоподобия (Log-Likelihood):
Так причем тут MSE
Чтобы это понять нам придется расписать по шагам все преобразования ММК.
Давайте распишем, чему равно . Выше мы предположили, что
распределен нормально. Вероятность
— это просто формула плотности нормального распределения
Теперь подставляем это в нашу формулу общего правдоподобия (произведение):
Не забываем про трюк с логарифмом, применяем логарифм на всю функцию, и в итоге получим:
Финал: Максимизация правдоподобия
Мы хотим найти и
, которые максимизируют эту штуку
.
Чтобы найти точку максимума (или минимума) функции, нужно взять ее производную и приравнять к нулю
В нашем случае мы ищем argmax по , поэтому мы берем частные производные по
и
(или просто по вектору
), то есть те члены где нет
производная будет равна нулю.
Что мы видим глядя на нашу фунцию?
Первый член
: Это константа. На поиск максимума не влияет. Выкидываем.
Второй член
: Это тоже константа (мы ищем
, а не
). Выкидываем.
Третий член
: А вот он зависит от наших
!
Смотрите: — это просто положительная константа. Значит, чтобы максимизировать все выражение (которое стоит со знаком «минус»), нам нужно минимизировать то, что осталось:
У нас получилась SSE - сумма квадратов ошибок.
А минимизация SSE это тоже самое что и минимизация MSE так как
Вот и вся связь. Минимизировать MSE — это математически то же самое, что максимизировать правдоподобие (MLE), при условии, что мы изначально предположили, что ошибки в наших данных распределены по Гауссу (нормально).
Заключение
Буду рад выслушать ваши замечания, предложения и конструктивную критику. Также приглашаю подписаться на мой телеграм-канал, где я делюсь своими знаниями и обзорами в области машинного обучения.
Комментарии (13)

FemboyEnjoyer
08.11.2025 20:04>почему мы минимизируем именно квадрат ошибки
чтобы подогнать среднее, если же вместо среднего хотим получать как можно близкое к медиане - надо оптимизировать mae

iShrimp
08.11.2025 20:04Квадрат хорош тем, что это гладкая функция, а сумма квадратов имеет единственный, он же глобальный, минимум с гладкой окрестностью.
Сумма модулей имеет глобальный минимум с негладкой окрестностью, что может замедлять сходимость. Но модуль менее чувствителен к выбросам данных.
Что если ввести функцию, сочетающую лучшие свойства обеих? Например, sqrt(x^2 + a).

F01D32
08.11.2025 20:04Что если ввести функцию, сочетающую лучшие свойства обеих? Например, sqrt(x^2 + a).
Есть функция потерь Хубера. В предложенном исполнении нужно добавить пару деталей, и тогда оно станет ее псевдо-версией.

SheldonP
08.11.2025 20:04"Мы хотим найти
и
, которые максимизируют эту штуку
"
А что стало с остальными компонентами вектора, у которых номер больше 1? Печалька

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

Vkiniakin
08.11.2025 20:04Они становятся зависимыми после получения данных.
Там получается система уравнений, её нужно решить и посмотреть
P.s. я сначала согласился, мол, с точки зрения симметрии они ж должеы быть независимы, а потом осознал глубину ошибки))

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

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

Vkiniakin
08.11.2025 20:04Помню эту задачку, только в учебнике она наоборот была. Нужно было найти точную формулу расчёта мат ожидания параметров, если даны x1,...xn и t1...tn.
Поскольку максимальный член -квадратичен, это имеет точное решение через Лапласа.
Если берём неправильный праер, равный 1, то E[teta|data] совпадает с teta argmax - это формула линейной регрессии. Но в чуть более общем случае нужно немного поковыряться с Гессианом, ТС слишком легко отделался...

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

tbl
08.11.2025 20:04SVD+LP. Но смотря, что оптимизировать надо.
Я делал такое для пространства линейных функций в задаче расчета усредненной стоимости доставки для корзины товаров, возможные разбиения которой могут доставляться различными способами, которые может выбрать пользователь. Решал через метод наименьших квадратов, для этого строил систему уравнений частных первых производных. Эта система неполна в том смысле, что количество неизвестных больше, чем количество линейных уравнений. Ее решение искал с помощью псевдоинверсии на базе SVD.Получается решение, которое зависит от вектора свободных параметров некоторой размерности n (геометрически решение лежит на дне долины на поверхности квадратов разниц). Далее для уточнения этих случайных параметров решал задачу линейного программирования на фиксированной выбранной целевой функции (например, алгебраическая сумма стоимости всех выбранных комбинаций доставок должна быть минимальной, но можно придумать и другую линейную функцию) при заданных граничных условиях. Здесь был выбран симплекс-метод, хоть, он и экспоненциальный, но граничные условия были такими простыми (например, стоимость сумм доставок разбиения корзины больше либо равно 0), что получающийся многогранник в n-мерном пространстве был очень ограничен по количеству ребер, по которым надо пробежаться при поиске решения.
Решение сделано на java, однопоточная калькуляция для корзины укладывалась в 50ms для 99.95 персентили, были использованы библиотеки ejml для SVD и apache commons math для ЛП

Pshir
08.11.2025 20:04Но вот парадокс: даже многие «прожженные» инженеры не всегда до конца понимают ее истинную работу под капотом.
Прожжённые инженеры прогуливали пары по матстатистике, или сейчас в прожжённые инженеры уже берут всех подряд?
GospodinKolhoznik
x -> 2*ln(x) тоже монотонное преобразование. Но если применить его, то надо минимизировать не сумму квадратов, а сумму 4 степени отклонений.