Условие
Объясните разницу между L1 (Lasso) и L2 (Ridge) регуляризацией. Когда какая предпочтительна? Что такое Elastic Net?
Решение
Формулы
Линейная регрессия + регуляризация:
- 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.
Подводные камни
- Не нормировали фичи. Признак в рублях и признак в долях получат разные штрафы — фейк-важности.
alphaподобрана на test set. Утечка. Используйте отдельный val/k-fold CV.- L1 нестабильна на коррелированных фичах. Используйте Elastic Net или сначала dimensionality reduction.
- Регуляризация intercept'а. В sklearn intercept по умолчанию не штрафуется; в самописной формуле — следите.
- «L1 даёт sparse фичи → лучшая интерпретируемость». Да, но какие именно фичи выживут — может быть нестабильно на бутстреп-реплицируемых выборках.
Эталонный ответ
L1 (Lasso) → sparse: зануляет несущественные веса, делает feature selection. L2 (Ridge) → размазывает: сжимает к нулю, но не до нуля. L1 для много признаков с подозрением на мало важных; L2 при мультиколлинеарности и «все понемногу важны». Elastic Net = L1 + L2, лучше для групп коррелированных фич. Всегда нормируйте признаки.