Линейная регрессия
Учимся предсказывать числовые значения — самая базовая модель ML, но суперважная для понимания всего остального.
Что такое линейная регрессия
Представь, что у тебя есть облако точек на графике — например, площадь квартиры и её цена. Линейная регрессия — это когда мы проводим через эти точки прямую линию так, чтобы она «лучше всего» описывала зависимость. По сути, мы подбираем прямую, которая минимизирует ошибку предсказания.
Это самая базовая модель в ML, но не стоит её недооценивать. Линейная регрессия — фундамент, на котором строится понимание всех остальных алгоритмов: от логистической регрессии до нейросетей.
Формула модели
Модель линейной регрессии предсказывает целевую переменную как взвешенную сумму признаков:
- w₀ — свободный член (bias, intercept) — сдвиг прямой
- w₁, w₂, ..., wₙ — веса (коэффициенты) при признаках
- x₁, x₂, ..., xₙ — значения признаков
В векторной форме это записывается компактно:
Главное — понять: модель линейна по параметрам (весам). Признаки при этом могут быть нелинейными — например, x² или log(x). Если добавить x² как новый признак, модель всё ещё линейная регрессия!
Функция потерь: MSE
Чтобы подобрать веса, нужен критерий «хорошести» прямой. Самый популярный — среднеквадратичная ошибка (Mean Squared Error):
Мы берём разницу между реальным значением yᵢ и предсказанием ŷᵢ, возводим в квадрат (чтобы положительные и отрицательные ошибки не компенсировали друг друга) и усредняем. Чем меньше MSE — тем лучше модель.
Почему именно квадрат?
Квадрат штрафует большие ошибки сильнее маленьких. Если модель ошиблась на 10 — штраф 100, если на 1 — штраф 1. Это и плюс (модель старается не делать грубых ошибок), и минус (чувствительность к выбросам).
Аналитическое решение (МНК)
В отличие от многих других моделей, линейную регрессию можно решить аналитически — без итеративной оптимизации. Метод наименьших квадратов (МНК) даёт точную формулу:
- X — матрица признаков (n объектов × m признаков)
- y — вектор целевых значений
- Xᵀ — транспонированная матрица X
- (XᵀX)⁻¹ — обратная матрица
На практике: если признаков немного (до нескольких тысяч) — аналитическое решение работает отлично. Если признаков миллионы — используют градиентный спуск, потому что обращение матрицы становится слишком дорогим (O(m³)).
Когда использовать
Подходит
- Зависимость между признаками и целевой переменной примерно линейная
- Нужна интерпретируемость — веса показывают, как каждый признак влияет на результат
- Мало данных и простая задача
- Как baseline для сравнения с более сложными моделями
Не подходит
- Нелинейные зависимости (хотя можно добавлять полиномиальные признаки)
- Много выбросов — MSE чувствителен к ним
- Мультиколлинеарность — когда признаки сильно коррелируют друг с другом, веса становятся нестабильными
Регуляризация: Ridge, Lasso, ElasticNet
Когда признаков много или они коррелируют, обычная линейная регрессия может переобучиться. Регуляризация добавляет штраф за большие веса в функцию потерь:
Ridge (L2-регуляризация)
Штрафует за большие веса, но не зануляет их. Все признаки остаются в модели, но их влияние «сжимается».
Lasso (L1-регуляризация)
Может занулить веса неважных признаков — по сути, делает отбор признаков автоматически. Полезно, когда среди сотни признаков реально важны только десять.
ElasticNet
Комбинация L1 и L2. Берёт лучшее от обоих: и отбор признаков (от Lasso), и устойчивость (от Ridge).
🎤 На собесе спросят: чем Ridge отличается от Lasso?
Ridge (L2) — сжимает веса к нулю, но не зануляет. Lasso (L1) — может занулить веса, делая автоматический feature selection. При мультиколлинеарности Ridge стабильнее. Если нужно убрать шумовые признаки — Lasso.
Итого
- Линейная регрессия — фундамент ML, её надо знать идеально
- Формула: y = wᵀx + b, функция потерь: MSE
- Аналитическое решение: w = (XᵀX)⁻¹Xᵀy
- Регуляризация борется с переобучением: Ridge (L2), Lasso (L1), ElasticNet
- Простая, интерпретируемая, быстрая — идеальный baseline
Материалы
Подробная теория с примерами на Python
Наглядное объяснение линейной регрессии с нуля
Курс Deep Learning School, раздел про линейные модели
Документация sklearn: LinearRegression, Ridge, Lasso