Регуляризация L1 vs L2 на собеседовании Data Scientist
Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.
Содержание:
Зачем регуляризация
Регуляризация — добавление штрафа за сложность модели в loss-функцию. Без неё линейная регрессия на 100 признаках с 50 наблюдениями уверенно переобучится: на трейне MSE = 0, на тесте — ужас.
Главная боль без регуляризации — модель идеальная на трейне, бесполезная на проде. Решение «больше данных» — не всегда возможно. Решение «выкинуть половину фич» — теряем сигнал. Регуляризация даёт компромисс: оставить все признаки, но «придавить» коэффициенты.
На собесе DS L1/L2 спрашивают почти всегда. Уровень от «что такое регуляризация» (junior) до «почему L1 порождает sparse-модель геометрически» (middle+).
L2 (Ridge)
L2-регуляризация добавляет к loss квадрат нормы коэффициентов:
Loss = MSE + λ · Σ wᵢ²λ — гиперпараметр силы регуляризации. λ=0 — обычная регрессия. λ→∞ — все коэффициенты к нулю.
Эффект: все коэффициенты уменьшаются, но не зануляются. Это shrinkage — «усадка» коэффициентов.
Когда полезно:
- Мультиколлинеарность (сильно скоррелированные признаки)
- Признаков много, но все примерно одинаково информативны
- Хочется устойчивую модель без отбора признаков
Аналитическое решение для линейной регрессии:
w = (XᵀX + λI)⁻¹ XᵀyДобавление λI делает матрицу XᵀX + λI обратимой даже при мультиколлинеарности — это второй практический плюс L2.
В sklearn:
from sklearn.linear_model import Ridge
model = Ridge(alpha=1.0) # alpha = λ
model.fit(X_train, y_train)L1 (Lasso)
L1-регуляризация — модуль вместо квадрата:
Loss = MSE + λ · Σ |wᵢ|Эффект: коэффициенты не только уменьшаются, но и зануляются при достаточно большом λ. Получается sparse-модель — часть признаков буквально удалена из неё.
Когда полезно:
- Признаков много, нужен отбор
- Интерпретируемость важна (модель из 5 признаков понятнее, чем из 500)
- Подозреваем, что только часть признаков релевантна
Минусы:
- При сильно скоррелированных признаках Lasso «случайно» выбирает один из группы (не предсказуемо)
- Нет аналитического решения, нужен оптимизатор (coordinate descent)
В sklearn:
from sklearn.linear_model import Lasso
model = Lasso(alpha=0.1)
model.fit(X_train, y_train)
print(np.sum(model.coef_ != 0)) # сколько фич осталосьПочему L1 даёт sparsity
Геометрический ответ — самый частый вопрос на собесе.
Регуляризация — это задача оптимизации с ограничением: минимизировать MSE при ограничении нормы w.
- L2: ограничение
Σ wᵢ² ≤ C— это круг (в 2D) или сфера в N-мерном. - L1: ограничение
Σ |wᵢ| ≤ C— это ромб (в 2D), вершины на осях.
Кривая постоянного MSE — эллипс. Решение задачи — точка касания эллипса с областью допустимых значений.
- С кругом (L2) точка касания почти всегда не на оси → коэффициенты ненулевые, но маленькие.
- С ромбом (L1) точка касания часто в вершине ромба → коэффициент по этой оси нулевой.
Это и есть «L1 даёт sparse» — геометрически ромб «цепляется» углами, в этих точках одна или несколько координат равны нулю.
Альтернативное объяснение через производную: производная |w| в точке 0 разрывна (subgradient), поэтому оптимизатор может «остановиться» строго на нуле. Производная w² в нуле = 0 — оптимизатор «проскакивает», коэффициент уменьшается, но не зануляется.
ElasticNet
Комбинация L1 и L2:
Loss = MSE + λ · [α · Σ |wᵢ| + (1-α) · Σ wᵢ²]α — баланс между L1 и L2. α=1 — Lasso, α=0 — Ridge.
Когда: скоррелированные группы признаков, нужен отбор, но Lasso ведёт себя плохо.
ElasticNet выбирает группу скоррелированных признаков целиком (не «случайно одного»), что предсказуемее Lasso.
from sklearn.linear_model import ElasticNet
model = ElasticNet(alpha=0.1, l1_ratio=0.5) # l1_ratio = αКогда что выбирать
| Кейс | Выбор |
|---|---|
| Все признаки релевантны, мультиколлинеарность | Ridge |
| Признаков сотни, нужен отбор | Lasso |
| Скоррелированные группы признаков, нужен отбор | ElasticNet |
| Хочется простую интерпретируемую модель | Lasso |
| Стабильность важнее sparsity | Ridge |
| Не уверены | ElasticNet с CV по α и λ |
Подбор λ:
- Cross-validation (
RidgeCV,LassoCV,ElasticNetCVв sklearn) - Поиск по логарифмической сетке:
np.logspace(-4, 2, 50) - Брать λ с минимальной CV-ошибкой или «1-SE rule» (большее λ в пределах одной стандартной ошибки от минимума — более устойчивая модель)
Частые ошибки
Не нормировать признаки. L1/L2 штрафуют коэффициенты — но коэффициент для «зарплата в рублях» в миллион раз больше, чем для «возраст в годах». Без нормировки регуляризация неравноправна. Перед Ridge/Lasso — StandardScaler.
Применять регуляризацию к intercept. Свободный член (b) обычно не штрафуют — он отражает базовый уровень. В sklearn по умолчанию intercept не регуляризуется (fit_intercept=True отдельно от регуляризации).
Lasso на скоррелированных признаках. Lasso выберет один признак из группы, остальные занулит. На разных folds — разные «победители». Нестабильность интерпретации.
Считать, что регуляризация заменяет EDA. Регуляризация поможет, если модель переобучается. Не поможет, если в данных шум, утечки, неверная спецификация.
λ от балды. Без CV выбирают λ «средненькое значение из примера». Подбирать через LassoCV/RidgeCV с cv=5.
Регуляризация в дереве. Дерево/RF/бустинги имеют свои механизмы регуляризации (max_depth, min_samples_leaf, learning_rate). L1/L2 — для линейных и нейросетей.
Регуляризация в нейросетях через L2 без bias decay. Стандартный L2 в torch.optim — weight_decay. Часто корректно — не штрафовать bias и normalization-параметры.
Связанные темы
- Bias-variance tradeoff простыми словами
- Что такое overfitting
- Cross-validation простыми словами
- Подготовка к собесу Data Scientist
- Linear regression для аналитика
FAQ
Что больше штрафует — L1 или L2?
Зависит от значений коэффициентов. При маленьких wᵢ (< 1) wᵢ² < |wᵢ| — L2 штрафует слабее. При больших wᵢ (> 1) — L2 штрафует сильнее. Поэтому L2 «больше давит» на крупные коэффициенты, L1 — равномерно по всем.
Можно ли использовать L1 в нейросети?
Можно (через weight_decay или ручной штраф), но обычно используют L2. L1 в нейросетях даёт sparsity на уровне весов, что само по себе бесполезно — нейросеть не становится меньше. Полезные приходящие на смену технологии — pruning и distillation.
Какая дефолтная альфа в sklearn для Ridge?
alpha=1.0. Не значит, что подходит — всегда подбирать через CV. Для нормированных признаков диапазон поиска обычно 1e-4 … 100.
Регуляризация — это то же, что dropout?
Концептуально похоже (борьба с переобучением), технически разное. Dropout случайно выключает нейроны при тренировке — это стохастическая регуляризация. L1/L2 — добавка к loss, детерминистическая.
Что такое early stopping и регуляризация?
Early stopping — остановка обучения, когда валидационная ошибка перестаёт улучшаться. Это форма регуляризации (ограничение «времени» обучения), но не L1/L2. На практике — комбинируют: L2 + early stopping, дополняют друг друга.
Это официальная информация?
Нет. Статья основана на классических работах по регуляризации (Tibshirani 1996 для Lasso, Hoerl-Kennard 1970 для Ridge, Zou-Hastie 2005 для ElasticNet) и документации sklearn.
Тренируйте Data Science — откройте тренажёр с 1500+ вопросами для собесов.