Собесов

zadachi_ds: L1 vs L2 регуляризация — геометрия и эффекты

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

Условие

В линейной/логистической регрессии добавляют регуляризацию L1 (Lasso) и L2 (Ridge). Объясните:

  1. Чем отличаются loss-функции?
  2. Почему L1 даёт разреженность (нулевые коэффициенты), а L2 — нет?
  3. Когда выбрать L1, когда L2, когда ElasticNet?
  4. Что такое путь регуляризации (regularization path)?

Решение

1) Loss-функции

L1 (Lasso):   L = MSE(y, ŷ) + α · Σ|w_i|
L2 (Ridge):   L = MSE(y, ŷ) + α · Σ w_i²
ElasticNet:   L = MSE(y, ŷ) + α · (ρ · Σ|w_i| + (1-ρ)/2 · Σ w_i²)

α > 0 — сила регуляризации; ρ ∈ [0, 1] — баланс между L1 и L2.

2) Геометрия разреженности

Регуляризация эквивалентна ограниченной оптимизации: минимизировать MSE при условии ||w||₁ ≤ t (для L1) или ||w||₂ ≤ t (для L2).

  • L1-шар — ромб (octahedron в d-мерности): углы лежат на осях, где компоненты = 0.
  • L2-шар — сфера: гладкая, не имеет «острых» точек.

Оптимум MSE (эллиптические изолинии) обычно касается границы. На остром угле L1-ромба касание происходит ровно в точке с нулём по некоторым координатам. На L2-сфере — почти всегда вне осей.

→ L1 «обнуляет» коэффициенты, L2 — «сжимает».

3) Когда что использовать

L1 (Lasso):

  • Много фич, известно, что лишь часть полезна → selection.
  • Интерпретируемость (sparse модель).
  • Высокая cardinality + linear model.

L2 (Ridge):

  • Мультиколлинеарность фич — Ridge «делит» вес между скоррелированными.
  • Все фичи хоть немного важны.
  • Численная стабильность (всегда есть единственное решение).
  • Лучше CV-error при равном MSE на small data.

ElasticNet:

  • Сильно скоррелированные фичи + нужно ещё и selection (L1 случайно «выбирает» одну из коррелированных, ElasticNet распределяет).
  • Чаще всего «по умолчанию» когда не уверены.

4) Регуляризационный путь

Зависимость коэффициентов от α: при α=0 — нерегуляризированная модель (все фичи); при α→∞ — все коэффициенты в ноль.

import numpy as np
from sklearn.linear_model import lasso_path, ridge_regression
import matplotlib.pyplot as plt
 
alphas = np.logspace(-3, 1, 100)
alphas_path, coefs, _ = lasso_path(X_train, y_train, alphas=alphas)
 
plt.figure(figsize=(10, 6))
for i, name in enumerate(feature_names):
    plt.plot(np.log10(alphas_path), coefs[i], label=name)
plt.xlabel('log(α)')
plt.ylabel('coef')
plt.legend()

L1 path: коэффициенты «выпадают» в ноль один за другим — естественный feature selection. L2 path: все коэффициенты постепенно сжимаются к нулю, но не достигают его.

Эффект на корреляцию

Скоррелированные фичи (x_1 ≈ x_2):

  • L1 выберет одну случайным образом, другую — в ноль. Между запусками может меняться.
  • L2 разделит вес поровну: w_1 = w_2 ≈ w_true / 2.
  • ElasticNet ведёт себя как L2 для коррелированных пар, но обнуляет нерелевантные.

Калибровка α через CV

from sklearn.linear_model import LassoCV, RidgeCV, ElasticNetCV
 
lasso = LassoCV(alphas=np.logspace(-4, 1, 50), cv=5).fit(X_train, y_train)
print("best alpha:", lasso.alpha_)
print("non-zero coefs:", (lasso.coef_ != 0).sum())

Bayesian интерпретация

  • L2 = Гауссовский prior w ~ N(0, σ²).
  • L1 = Laplace prior w ~ Laplace(0, b).

Laplace имеет острый пик в нуле → шанс попасть в ноль большой → разреженность.

Cвязь с logistic regression

В логистической регрессии регуляризация той же логики, через параметр C = 1/α:

LogisticRegression(penalty='l1', solver='liblinear', C=0.1)
LogisticRegression(penalty='l2', solver='lbfgs',      C=1.0)
LogisticRegression(penalty='elasticnet', solver='saga', l1_ratio=0.5, C=0.5)

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

  1. Стандартизация перед регуляризацией обязательна. Иначе фичи разного масштаба получают разный штраф несправедливо.
  2. L1 на сильно скоррелированных фичах нестабилен между запусками — выбирает одну случайно.
  3. α слишком большое → все коэффициенты в ноль → underfit.
  4. L2 не делает feature selection — все веса остаются ненулевыми (хоть и маленькими).
  5. Sklearn Ridge и LogisticRegression(penalty='l2') используют α и C = 1/α соответственно — частая путаница.
  6. L1 + bias term: bias обычно не регуляризируется. В sklearn — управляется fit_intercept=True.
  7. solver ограничения: lbfgs не поддерживает L1; нужно liblinear или saga.

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

L1 (Lasso) L2 (Ridge) ElasticNet
Penalty Σ w
Sparsity да (обнуляет) нет (сжимает) да
Стабильность нестабильна на коррелированных стабильна стабильна
Selection да нет да
Когда много фич, нужен отбор мультиколлинеарность оба эффекта

L1 даёт разреженность из-за «острых углов» ромба l1-шара — оптимум MSE касается его на оси. L2 — сфера, касание почти всегда вне осей.

α подбирается через CV. Перед регуляризацией — всегда стандартизация.

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

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

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