Ответ
В градиентном бустинге L1 и L2 регуляризация применяются непосредственно к весам листьев деревьев, составляющих ансамбль, чтобы контролировать сложность модели и бороться с переобучением. Они добавляют штрафной член к оптимизируемой функции потерь.
Механизм в контексте бустинга:
Пусть Obj(θ) = Loss(θ) + Ω(θ), где Ω(θ) — член регуляризации.
-
L2-регуляризация (Ridge, параметр
lambda/reg_lambda):- Штраф:
Ω(θ) = λ * Σ(w²), гдеw— веса листьев в дереве. - Эффект: "Сжимает" веса листьев равномерно, приближая их к нулю, но редко обнуляя полностью. Это делает модель более гладкой и устойчивой, снижая дисперсию предсказаний.
- Штраф:
-
L1-регуляризация (Lasso, параметр
alpha/reg_alpha):- Штраф:
Ω(θ) = α * Σ|w|. - Эффект: Может обнулять веса некоторых листьев, выполняя тем самым встроенный отбор признаков (feature selection) на уровне структуры дерева. Если разделение по какому-то признаку дает малый вклад в уменьшение функции потерь с учетом штрафа L1, вес соответствующего листа может стать нулевым, и это разделение по сути игнорируется.
- Штраф:
Практическое использование в XGBoost:
import xgboost as xgb
params = {
'objective': 'reg:squarederror',
'max_depth': 6,
'learning_rate': 0.1,
'reg_lambda': 1.5, # Сила L2-регуляризации (по умолчанию 1)
'reg_alpha': 0.1, # Сила L1-регуляризации (по умолчанию 0)
'subsample': 0.8
}
model = xgb.XGBRegressor(**params)
model.fit(X_train, y_train)
Сравнение и выбор:
- L2 (
lambda) обычно используется чаще, так как она более стабильна и лучше справляется с мультиколлинеарностью. - L1 (
alpha) полезен, когда есть подозрение, что многие признаки избыточны или слабо информативны, и нужна более простая, интерпретируемая модель. - Часто их используют вместе (Elastic Net подход в линейных моделях), что также возможно в градиентном бустинге, задав оба параметра ненулевыми.