В чем разница между L1- и L2-регуляризацией?

«В чем разница между L1- и L2-регуляризацией?» — вопрос из категории Классическое ML, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

L1 (Lasso) и L2 (Ridge) регуляризации добавляют штрафной член к функции потерь модели, чтобы снизить переобучение, но делают это по-разному, что приводит к различным эффектам.

  • L1-регуляризация (Lasso): Добавляет к функции потерь сумму абсолютных значений весов модели: λ * Σ|w_i|. Это имеет тенденцию обнулять менее важные веса, создавая разреженные модели. Это полезно для отбора признаков (feature selection), так как модель автоматически исключает нерелевантные фичи.

  • L2-регуляризация (Ridge): Добавляет сумму квадратов весов: λ * Σ(w_i²). Она равномерно уменьшает величину всех весов, но редко сводит их к точному нулю. Это эффективно борется с мультиколлинеарностью (сильной корреляцией между признаками) и стабилизирует модель.

Практический пример с scikit-learn:

from sklearn.linear_model import Lasso, Ridge
from sklearn.datasets import make_regression

X, y = make_regression(n_samples=100, n_features=10, noise=0.1, random_state=42)

# Модель с L1-регуляризацией
lasso = Lasso(alpha=0.1)
lasso.fit(X, y)
print("Lasso coefficients (некоторые обнулены):", lasso.coef_)

# Модель с L2-регуляризацией
ridge = Ridge(alpha=0.1)
ridge.fit(X, y)
print("Ridge coefficients (все небольшие):", ridge.coef_)

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

  • Lasso (L1): Когда вы подозреваете, что многие признаки несущественны, и хотите получить интерпретируемую модель с малым подмножеством признаков.
  • Ridge (L2): Когда все признаки потенциально важны, но они коррелированы между собой, и нужно предотвратить переобучение.
  • ElasticNet: Часто используется компромисс — линейная комбинация L1 и L2, которая сочетает преимущества обоих методов.