Ответ
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, которая сочетает преимущества обоих методов.
Ответ 18+ 🔞
Ну ты представляешь, есть у тебя модель, которая пытается всё запомнить, как отличник-зубрила на экзамене. И чтобы она не переобучалась, ей в функцию потерь добавляют штрафной член. Но, бля, делают это по-разному, и получается две абсолютно разные истории, ёпта.
-
L1-регуляризация (Lasso): Эта штука добавляет сумму модулей весов:
λ * Σ|w_i|. Её главный трюк в том, что она обнуляет неважные веса нахуй. Получается разреженная модель, как будто она сама проводит отбор признаков и говорит: "Эту фичу — нахуй, эту — нахуй, а вот эти три оставлю". Пизда рулю, если хочешь понять, какие признаки реально работают. -
L2-регуляризация (Ridge): А эта хитрая жопа добавляет сумму квадратов весов:
λ * Σ(w_i²). Она не обнуляет, а равномерно придавливает все веса, делая их поменьше. Она редко доводит до нуля, зато отлично справляется, когда признаки сильно коррелируют друг с другом (эта мультиколлинеарность, блядь). Просто стабилизирует модель, чтобы не дёргалась.
Смотри, как это в коде выглядит:
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. Компромисс, ёб твою мать. Часто самый живучий вариант получается, потому что сочетает плюсы обоих подходов.