Ответ
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, которая сочетает преимущества обоих методов.