Машинное обучение
Линейная регрессия
Когда страховая компания оценивает стоимость полиса, когда экономист предсказывает рост ВВП, когда data scientist прогнозирует выручку на следующий квартал - за всем этим стоит один и тот же алгоритм, которому больше 200 лет. Карл Фридрих Гаусс использовал его в 1809 году для предсказания орбит астероидов. Сегодня это первый алгоритм, который изучают в любом курсе ML. Одна формула, одна прямая линия - триллионные решения опираются на неё. Как провести прямую через облако точек так, чтобы ошибка была минимальной?
- **Zillow Zestimate** оценивает стоимость 100+ млн домов в США, используя линейную регрессию с сотнями признаков (площадь, район, школы, преступность) - и от этой оценки зависят реальные сделки на триллионы долларов
- **Фармацевтика** использует линейную регрессию для определения зависимости дозы лекарства от параметров пациента (вес, возраст, функция почек) - ошибка в предсказании может стоить жизни
- **Климатология** моделирует связь между концентрацией CO2 и средней температурой планеты линейной регрессией - именно эта модель легла в основу первых предупреждений об изменении климата в 1960-х
Предварительные знания
Метод наименьших квадратов и слово «регрессия»
У линейной регрессии два независимых истока. Метод наименьших квадратов впервые появился в печати в 1805 году, когда Адриен-Мари Лежандр опубликовал его как способ подгонять орбиты к астрономическим наблюдениям. Карл Фридрих Гаусс утверждал, что пользовался им ещё с 1795 года, и опубликовал свою версию в 1809-м, чем породил долгий спор о приоритете, который историки обсуждают до сих пор. Само слово «регрессия» появилось гораздо позже, у Фрэнсиса Гальтона в 1886 году. Изучая наследственность, он заметил, что сыновья очень высоких отцов обычно высоки, но ближе к среднему; это притяжение он назвал «регрессией к среднему». За статистической прямой, которой он это описывал, закрепилось то же название, поэтому метод про подгонку прямых вообще зовётся регрессией.
Гипотеза: y = wx + b
Задача риелтора: предсказать цену квартиры по площади. Есть данные: 30 кв.м - 3 млн, 50 кв.м - 5 млн, 80 кв.м - 7.5 млн. На графике эти точки лягут **примерно на одну прямую линию**. Линейная регрессия - алгоритм, который находит эту прямую автоматически.
Математически прямая линия описывается уравнением **y = wx + b**, где **w** (weight, вес) - это наклон прямой, а **b** (bias, сдвиг) - точка пересечения с вертикальной осью. В контексте ML это уравнение называется **гипотезой** - наше предположение о том, как входные данные x связаны с выходом y. Цель обучения: найти такие w и b, чтобы прямая проходила как можно ближе ко всем точкам данных.
Когда признаков несколько (площадь, этаж, расстояние до метро), уравнение расширяется: **y = w1*x1 + w2*x2 + ... + wn*xn + b**. Каждый признак получает свой вес wi, определяющий его вклад в предсказание. В матричной записи это компактно: **y = X * W + b**, где X - матрица данных, W - вектор весов.
**Почему это называется "линейная" регрессия?** Потому что предсказание - это *линейная комбинация* входных признаков: каждый xi умножается на свой вес wi и всё складывается. Графически в 2D это прямая линия, в 3D - плоскость, в более высоких размерностях - гиперплоскость. Модель не может выучить кривые зависимости (параболу, синусоиду) - для этого нужна полиномиальная регрессия.
В уравнении гипотезы y = wx + b, что произойдёт с предсказанием, если увеличить вес w при фиксированном b?
Функция стоимости: MSE
Мы знаем, что нужно найти «лучшие» w и b. Но как формально определить, что одна прямая лучше другой? Нужна **метрика ошибки** - число, которое показывает, насколько далеко наши предсказания от реальных значений. Чем меньше это число, тем лучше модель. Такая метрика называется **функция стоимости** (cost function) или **функция потерь** (loss function).
Самая распространённая функция стоимости для регрессии - **Mean Squared Error (MSE)**: среднее квадратов отклонений предсказаний от истинных значений. Формула: **J(w, b) = (1/n) * sum((y_pred_i - y_actual_i)^2)**, где n - количество точек данных, y_pred - предсказание модели, y_actual - реальное значение.
**Почему именно квадрат ошибки, а не модуль?** Три причины: 1. **Штраф за большие ошибки** - ошибка в 10 штрафуется в 100, а не в 10 (квадрат растёт быстрее). Большие промахи критичнее мелких 2. **Всегда положительна** - квадрат числа >= 0, поэтому положительные и отрицательные ошибки не компенсируют друг друга 3. **Дифференцируема** - производная x^2 = 2x, гладкая функция. Модуль |x| имеет излом в нуле, что затрудняет оптимизацию
Выпуклость MSE - ключевое свойство линейной регрессии. В отличие от нейросетей, где функция стоимости имеет множество локальных минимумов, у линейной регрессии минимум **ровно один** - глобальный. Это позволяет найти точное аналитическое решение, а не подбирать параметры итерациями.
**MSE чувствителен к выбросам!** Если одна квартира 30 кв.м стоит 30 млн (ошибка в данных или пентхаус с видом), квадрат ошибки будет огромным и "перетянет" прямую к себе. Для данных с выбросами используют MAE (Mean Absolute Error) или Huber loss, которые штрафуют большие ошибки мягче.
Почему MSE использует квадрат разности, а не просто разность (y_pred - y_actual)?
Нормальное уравнение: аналитическое решение
Мы определили функцию стоимости MSE и знаем, что нужно найти её минимум. Из математического анализа известно: **минимум гладкой функции находится там, где производная равна нулю**. Для MSE линейной регрессии это условие можно решить аналитически - получается формула, которая даёт оптимальные веса W за **один шаг**, без итераций. Эта формула называется **нормальным уравнением** (Normal Equation).
Красота этой формулы в том, что она даёт **точное** решение за одну операцию. Не нужно подбирать learning rate, не нужно ждать сходимости, нет гиперпараметров. Подставил данные - получил оптимальные веса. Именно поэтому линейная регрессия - алгоритм, с которого начинают изучение ML: он имеет **замкнутое аналитическое решение**, в отличие от большинства других моделей.
**Зачем добавлять столбец единиц?** Чтобы включить сдвиг b в матричное умножение. Без столбца единиц: y = w*x. Со столбцом единиц: y = [x, 1] * [w, b]^T = w*x + b*1 = w*x + b. Это стандартный приём, позволяющий записать все параметры (веса и сдвиг) в одном векторе W.
**Когда нормальное уравнение не работает:** матрица X^T * X должна быть обратимой (невырожденной). Она становится необратимой, если: 1. признаки **линейно зависимы** - например, площадь в кв.м и площадь в кв.футах (один = другой * 10.764) 2. **примеров меньше, чем признаков** (n < m). На практике используют **псевдообратную матрицу** (np.linalg.pinv), которая работает даже в этих случаях.
Почему нормальное уравнение W = (X^T * X)^(-1) * X^T * y не используется для моделей с миллионами признаков?
Реализация линейной регрессии
Теперь соберём все части вместе: от загрузки данных до оценки модели. На практике линейную регрессию реализуют через библиотеку **scikit-learn**, которая оборачивает нормальное уравнение в удобный API. Но прежде чем использовать готовый инструмент, разберёмся, как оценить качество модели и на что обращать внимание.
Линейная регрессия делает несколько **допущений (assumptions)** о данных. Если они нарушены, модель может давать ненадёжные предсказания, даже если метрики на обучающей выборке выглядят хорошо.
**Линейная регрессия как baseline.** В индустрии ML есть правило: всегда начинайте с простой модели. Линейная регрессия тренируется за миллисекунды, легко интерпретируется (вес каждого признака виден), и часто даёт результат «достаточно хороший». Если линейная регрессия даёт R^2 = 0.85 - стоит задуматься, нужна ли нейросеть с R^2 = 0.87, но в 1000 раз медленнее и сложнее.
Линейная регрессия подходит для любых данных - просто проведи прямую через точки
Линейная регрессия предполагает линейную зависимость между признаками и целевой переменной. Для нелинейных зависимостей (параболических, экспоненциальных) нужна полиномиальная регрессия или другие модели
Если зависимость между X и y нелинейна (например, цена растёт экспоненциально), прямая линия систематически ошибается: занижает на краях и завышает в центре. Высокий R^2 на train не гарантирует, что модель правильно описывает реальную зависимость - нужно проверять residual plot и assumptions
Модель линейной регрессии показывает R^2 = 0.98 на обучающей выборке, но R^2 = 0.45 на тестовой. Что произошло?
Ключевые идеи
- **Гипотеза** линейной регрессии: y = wx + b - прямая линия, где w (вес) определяет наклон, а b (сдвиг) - точку пересечения с осью y. Для нескольких признаков: y = X * W + b
- **MSE (Mean Squared Error)** измеряет качество модели: чем меньше среднее квадратов отклонений, тем лучше прямая проходит через данные. MSE для линейной регрессии - выпуклая функция с единственным минимумом
- **Нормальное уравнение** W = (X^T * X)^(-1) * X^T * y находит оптимальные веса за один шаг, но имеет сложность O(m^3) - для больших данных используют gradient descent
- **На практике** линейная регрессия - baseline-модель, с которой начинают любой ML-проект. Она проста, интерпретируема и конкурентоспособна - как предсказание орбит астероидов Гауссом, с которого мы начали, так и современные модели оценки недвижимости используют тот же принцип минимизации квадратов ошибок
Связанные темы
Линейная регрессия - фундамент, на котором строятся более продвинутые методы. Каждое расширение решает конкретное ограничение базовой модели:
- Математические основы ML — Линейная алгебра (матричное умножение, обращение матриц) и производные - математический фундамент, необходимый для понимания нормального уравнения и MSE
- Полиномиальная регрессия — Расширение линейной регрессии для нелинейных зависимостей: добавляем x^2, x^3 как новые признаки, сохраняя линейность по параметрам
- Регуляризация (L1/L2) — Решает проблему переобучения линейной регрессии: добавляет штраф за большие веса в функцию стоимости (Ridge, Lasso, ElasticNet)
- Градиентный спуск — Альтернатива нормальному уравнению для нахождения минимума MSE: итеративный метод, работающий для любого количества признаков и нелинейных моделей
Вопросы для размышления
- Если добавить в модель 100 признаков (площадь, этаж, район, цвет стен, день недели публикации объявления) - станет ли предсказание точнее? Когда больше признаков вредит, а не помогает?
- Линейная регрессия предполагает, что зависимость между ценой и площадью квартиры линейна. В каких диапазонах это может нарушаться и почему?
- Почему в индустрии часто начинают с линейной регрессии, даже если заранее знают, что данные нелинейны? Какую ценность несёт заведомо упрощённая модель?
Связанные уроки
- ml-05-evaluation — MSE и R^2 - стандартные метрики для оценки регрессии
- ml-07-polynomial-regression — Полиномиальная регрессия - нелинейное расширение линейной
- ml-08-regularization — Регуляризация (Ridge/Lasso) применяется к линейной регрессии
- stat-09-regression
- la-06-gauss