Условие
Объясните разницу L1, L2, ElasticNet, когда какую выбирать и как это связано с MAP-оценкой.
Решение
Подход
| L2 / Ridge | L1 / Lasso | ElasticNet | |
|---|---|---|---|
| Штраф | λ·Σθ² |
`λ·Σ | θ |
| Sparsity | Нет, маленькие θ | Да, обнуляет θ | Между |
| Корр-фичи | Распределяет | Случайно одну | Сглаживает |
| Гладкость | Дифференцируема | Не в 0 | Зависит от α |
| MAP prior | Gaussian | Laplace | Mixture |
Когда L1
- Много фичей, многие нерелевантные — L1 выкинет.
- Нужна интерпретация: какие фичи важны.
- Sparse coefficients для inference / production.
Когда L2
- Все фичи потенциально полезны, хотим небольшие коэффициенты.
- Коррелирующие фичи (multicollinearity) — L2 распределяет вес.
- Стабильность к шуму, лучшая prediction.
Когда ElasticNet
- Корреляции среди фичей И хотим sparsity. L1 один из коррелирующих случайно выбирает; ElasticNet их группирует.
- Hyperparameter
α(l1_ratio) выбирается через CV.
Реализация
from sklearn.linear_model import Lasso, Ridge, ElasticNet
from sklearn.linear_model import LassoCV, RidgeCV, ElasticNetCV
# Стандартизация обязательна
from sklearn.preprocessing import StandardScaler
X_std = StandardScaler().fit_transform(X)
# CV для λ
lasso = LassoCV(cv=5, alphas=np.logspace(-4, 2, 50)).fit(X_std, y)
ridge = RidgeCV(alphas=np.logspace(-4, 2, 50)).fit(X_std, y)
enet = ElasticNetCV(cv=5, l1_ratio=[0.1,0.3,0.5,0.7,0.9,0.95,0.99]).fit(X_std, y)
print("L1 ненулевых коэффициентов:", (lasso.coef_ != 0).sum())Connection to MAP
Гауссовский prior θ ~ N(0, σ²) → L2 регуляризация.
Лапласовский prior θ ~ Laplace(0, b) → L1.
ElasticNet — mixture.
argmax P(θ|data) = argmax P(data|θ)P(θ) → log → min -log L + (-log prior).
Подводные камни
- Стандартизация фичей: без неё штраф несравним по фичам с разными масштабами. Это обязательно.
- L1 при коллинеарных фичах — выбирает одну случайно (неустойчиво). Группировку даёт ElasticNet.
- Categorical с one-hot: L1 обнулит часть категорий → trap, лучше group lasso.
- Lasso не unbiased estimator: коэффициенты shrunken, не используйте их для inference без debiasing.
- На больших p (>>n) L1 ограничивает число выбранных фичей сверху n, что плохо если истинных релевантных >n.
Эталонный ответ
L1 (Lasso): sparsity, выбор фичей, Laplace prior. L2 (Ridge): shrinkage, стабильность к корреляции, Gaussian prior. ElasticNet: смесь, группирует коррелированные фичи. Всегда стандартизируйте фичи, λ через CV. Coefficients после L1 biased — не использовать для inference без debiasing.