2.1.2
Ridge & Lasso
Resumo
- A regressão Ridge encolhe os coeficientes suavemente com uma penalidade L2 e permanece estável mesmo quando as características são altamente correlacionadas.
- A regressão Lasso aplica uma penalidade L1 que pode levar alguns coeficientes exatamente a zero, fornecendo seleção de características integrada e interpretabilidade.
- O ajuste da intensidade de regularização \(\alpha\) controla o equilíbrio entre ajustar os dados de treinamento e generalizar para dados não vistos.
- Combinar padronização com validação cruzada ajuda a escolher hiperparâmetros que previnem o sobreajuste mantendo o desempenho forte.
Intuição #
Este método deve ser interpretado por meio de suas suposições, condições dos dados e como as escolhas de parâmetros afetam a generalização.
Explicação Detalhada #
Formulação Matemática #
Ambos os métodos minimizam a perda usual de erro quadrático mais um termo de regularização:
- Regressão Ridge $$ \min_{\boldsymbol\beta, b} \sum_{i=1}^{n} \left(y_i - (\boldsymbol\beta^\top \mathbf{x}_i + b)\right)^2 + \alpha \lVert \boldsymbol\beta \rVert_2^2 $$
- Regressão Lasso $$ \min_{\boldsymbol\beta, b} \sum_{i=1}^{n} \left(y_i - (\boldsymbol\beta^\top \mathbf{x}_i + b)\right)^2 + \alpha \lVert \boldsymbol\beta \rVert_1 $$
Valores maiores de \(\alpha\) impõem encolhimento mais forte. No caso do Lasso, quando \(\alpha\) excede um limiar, alguns coeficientes se tornam exatamente zero, produzindo modelos esparsos.
Experimentos em Python #
O exemplo abaixo aplica Ridge, Lasso e mínimos quadrados ordinários ao mesmo problema de regressão sintética. Comparamos as magnitudes dos coeficientes e as pontuações de generalização.
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
from sklearn.linear_model import Lasso, LassoCV, LinearRegression, Ridge, RidgeCV
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
# Parameters
n_samples = 200
n_features = 10
n_informative = 3
rng = np.random.default_rng(42)
# True coefficients (only first three informative)
coef = np.zeros(n_features)
coef[:n_informative] = rng.normal(loc=3.0, scale=1.0, size=n_informative)
X = rng.normal(size=(n_samples, n_features))
y = X @ coef + rng.normal(scale=5.0, size=n_samples)
linear = make_pipeline(StandardScaler(with_mean=False), LinearRegression()).fit(X, y)
ridge = make_pipeline(
StandardScaler(with_mean=False),
RidgeCV(alphas=np.logspace(-3, 3, 13), cv=5)
).fit(X, y)
lasso = make_pipeline(
StandardScaler(with_mean=False),
LassoCV(alphas=np.logspace(-3, 1, 9), cv=5, max_iter=50_000)
).fit(X, y)
models = {
"Linear": linear,
"Ridge": ridge,
"Lasso": lasso,
}
# Plot coefficient magnitudes
indices = np.arange(n_features)
width = 0.25
plt.figure(figsize=(10, 4))
plt.bar(indices - width, np.abs(linear[-1].coef_), width=width, label="Linear")
plt.bar(indices, np.abs(ridge[-1].coef_), width=width, label="Ridge")
plt.bar(indices + width, np.abs(lasso[-1].coef_), width=width, label="Lasso")
plt.xlabel("feature index")
plt.ylabel("|coefficient|")
plt.legend()
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
# Cross-validated R^2 scores
for name, model in models.items():
scores = cross_val_score(model, X, y, cv=5, scoring="r2")
print(f"{name:>6}: R^2 = {scores.mean():.3f} ± {scores.std():.3f}")
Leitura dos resultados #
- A Ridge encolhe ligeiramente todos os coeficientes e permanece estável mesmo com multicolinearidade.
- A Lasso empurra alguns coeficientes para zero, mantendo apenas as características mais importantes.
- Selecione \(\alpha\) via validação cruzada para equilibrar viés e variância, e padronize as características para garantir uma comparação justa entre dimensões.
Referências #
- Hoerl, A. E., & Kennard, R. W. (1970). Ridge Regression: Biased Estimation for Nonorthogonal Problems. Technometrics, 12(1), 55–67.
- Tibshirani, R. (1996). Regression Shrinkage and Selection via the Lasso. Journal of the Royal Statistical Society: Series B, 58(1), 267–288.
- Zou, H., & Hastie, T. (2005). Regularization and Variable Selection via the Elastic Net. Journal of the Royal Statistical Society: Series B, 67(2), 301–320.