Условие
Чем отличаются L1- и L2-регуляризации? Когда что использовать? Что такое Elastic Net и зачем он нужен?
Решение
Подход
К функции потерь добавляется штраф за «размер» весов:
- L2 (Ridge) — штраф
λ * Σ wᵢ². Производная пропорциональнаw, поэтому веса стремятся к нулю, но не обнуляются. Хорошо работает при мультиколлинеарности — «распределяет» влияние между коррелированными признаками. - L1 (Lasso) — штраф
λ * Σ |wᵢ|. Производная —sign(w), поэтому веса могут стать ровно нулевыми. Это даёт «бесплатный» отбор признаков. - Elastic Net —
λ * (α * Σ|wᵢ| + (1-α) * Σwᵢ²). Берёт лучшее: отбор признаков от L1 и стабильность от L2 при коррелированных фичах.
Когда что брать
- Много признаков, и многие явно лишние → L1.
- Признаки коррелированы, важна стабильность весов → L2.
- Много признаков + есть коррелированные группы → Elastic Net.
- Если ничего не знаете про данные — стартуйте с L2 как более стабильного.
from sklearn.linear_model import Ridge, Lasso, ElasticNet
ridge = Ridge(alpha=1.0)
lasso = Lasso(alpha=0.1)
enet = ElasticNet(alpha=0.1, l1_ratio=0.5) # 50/50 mixПодводные камни
- Не забыть стандартизировать признаки перед регуляризацией. Иначе штраф будет несправедливо больше бить по фичам с большой шкалой.
- L1 на сильно коррелированных признаках ведёт себя неустойчиво: какой именно из коррелированных оставить — определяется почти случайно. Здесь полезен Elastic Net.
- В sklearn
alphaобозначает силу регуляризации, а вLogisticRegression— параметрC = 1/alpha. Перепутать — типичная ошибка.
Эталонный ответ
L1 даёт разреженные веса (отбор признаков), L2 — гладкие и устойчивые к мультиколлинеарности. Elastic Net комбинирует их через параметр l1_ratio. Перед использованием обязательно масштабировать признаки.