Собесов

Хабр ML — L1 vs L2 регуляризация: когда что выбирать

ML / Data ScienceРегуляризацияСредняяMiddle

Условие

Объясните разницу между L1 (Lasso) и L2 (Ridge) регуляризацией. Когда какая предпочтительна? Что такое Elastic Net?

Решение

Формулы

Линейная регрессия + регуляризация:

minwyXw2+λR(w)\min_{w} \|y - Xw\|^2 + \lambda \cdot R(w)
  • L1 (Lasso): R(w) = Σ |w_i|;
  • L2 (Ridge): R(w) = Σ w_i²;
  • Elastic Net: R(w) = α · Σ|w_i| + (1-α) · Σw_i².

Ключевое отличие

L1 зануляет коэффициенты — действует как feature selection. L2 сжимает к нулю, но не до нуля.

Геометрически: L1-ограничение — квадрат (ромб), оптимум часто лежит в вершинах = на осях = sparse решение. L2-ограничение — круг, оптимум обычно внутри = плотный вектор.

Что выбирать

Ситуация L1 L2 Elastic Net
Много фич, ожидаем что мало важных
Все фичи слегка важны
Высокая мультиколлинеарность
Нужна интерпретируемость + sparse
Группы коррелированных фич
Высокоразмерные данные (p > n)

Тонкость с мультиколлинеарностью

L1 при сильно коррелированных признаках произвольно выбирает один и зануляет остальные — нестабильно (на чуть других данных выбирает другой). L2 размазывает вес равномерно. Elastic Net объединяет: группа коррелированных признаков либо все включаются, либо все исключаются.

Гиперпараметр λ (alpha в sklearn)

  • λ → 0: обычная регрессия, overfitting возможен.
  • λ → ∞: все веса к 0, underfitting.
  • Подбор: cross-validation, LassoCV, RidgeCV, ElasticNetCV.
from sklearn.linear_model import LassoCV, RidgeCV, ElasticNetCV
 
lasso = LassoCV(cv=5, alphas=[0.001, 0.01, 0.1, 1, 10]).fit(X_train, y_train)
print(lasso.alpha_, (lasso.coef_ != 0).sum())   # сколько фич выжило

Нормирование критично

L1/L2 штрафуют веса по модулю, но веса зависят от шкалы фичи. Сначала StandardScaler или MinMaxScaler.

Связь с Байесом

  • L2 ↔ Гауссов prior на веса с центром 0.
  • L1 ↔ Лапласовский (двойной экспоненциальный) prior.

Для нейронных сетей

  • L2 (weight decay) — стандарт.
  • L1 редко используется напрямую, чаще через структурную регуляризацию или dropout.

Подводные камни

  1. Не нормировали фичи. Признак в рублях и признак в долях получат разные штрафы — фейк-важности.
  2. alpha подобрана на test set. Утечка. Используйте отдельный val/k-fold CV.
  3. L1 нестабильна на коррелированных фичах. Используйте Elastic Net или сначала dimensionality reduction.
  4. Регуляризация intercept'а. В sklearn intercept по умолчанию не штрафуется; в самописной формуле — следите.
  5. «L1 даёт sparse фичи → лучшая интерпретируемость». Да, но какие именно фичи выживут — может быть нестабильно на бутстреп-реплицируемых выборках.

Эталонный ответ

L1 (Lasso) → sparse: зануляет несущественные веса, делает feature selection. L2 (Ridge) → размазывает: сжимает к нулю, но не до нуля. L1 для много признаков с подозрением на мало важных; L2 при мультиколлинеарности и «все понемногу важны». Elastic Net = L1 + L2, лучше для групп коррелированных фич. Всегда нормируйте признаки.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти