Elastic Net
A Rede Elástica (Elastic Net) é uma abordagem de modelagem linear regularizada (regularized) que combina penalidades L1 (LASSO (lasso)) e L2 (de crista (ridge)). Ela foi projetada para produzir modelos que sejam, ao mesmo tempo:
- Esparsos (alguns coeficientes se tornam exatamente zero, realizando seleção de atributos (feature selection)), como em Regressão LASSO
- Estáveis sob multicolinearidade (multicollinearity) (atributos correlacionados), como em Regressão de Crista
Como muitos conjuntos de dados do mundo real contêm preditores correlacionados (por exemplo, categorias codificadas em one-hot (one-hot encoded), atributos defasados no tempo (time-lag features), n-gramas (n-grams) de texto sobrepostos), a Rede Elástica costuma ser um padrão prático entre modelos lineares quando você busca interpretabilidade (interpretability) e robustez (robustness).
Rede Elástica em contexto: modelos lineares e regularização
Na regressão linear (linear regression), prevemos um alvo contínuo com uma função linear:
[ \hat{y} = X\beta + b ]
onde:
- (X \in \mathbb{R}^{n \times p}) é a matriz de atributos (feature matrix)
- (\beta \in \mathbb{R}^{p}) são os coeficientes
- (b) é um intercepto (intercept) (tipicamente não penalizado)
Quando (p) é grande, os atributos são ruidosos, ou os preditores são correlacionados, o método de mínimos quadrados ordinários (ordinary least squares) pode sobreajustar (overfit) e produzir coeficientes instáveis. A regularização (regularization) (veja Regularização) adiciona uma penalidade (penalty) que desencoraja soluções excessivamente complexas.
A Rede Elástica faz isso combinando as duas penalidades mais comuns:
- Norma L1 (L1 norm): (|\beta|_1 = \sum_j |\beta_j|) (incentiva esparsidade (sparsity))
- Norma L2 (L2 norm): (|\beta|_2^2 = \sum_j \beta_j^2) (incentiva coeficientes pequenos e distribuídos)
Função objetivo
Objetivo padrão da Rede Elástica (perda quadrática (squared loss))
Uma formulação comum da Rede Elástica para regressão linear é:
[ \min_{\beta, b}\ \frac{1}{2n}|y - (X\beta + b)|_2^2\ +\ \lambda\left(\alpha|\beta|_1 + \frac{1-\alpha}{2}|\beta|_2^2\right) ]
Partes-chave:
- O primeiro termo é o ajuste aos dados (erro quadrático médio (mean squared error) até uma constante).
- O segundo termo é a penalidade da Rede Elástica.
Hiperparâmetros (hyperparameters):
- (\lambda \ge 0): força geral da regularização (regularization strength)
- (\alpha \in [0, 1]): parâmetro de mistura (mixing parameter) entre L1 e L2
Casos especiais:
- (\alpha = 1) → L1 puro → LASSO (Regressão LASSO)
- (\alpha = 0) → L2 puro → crista (Regressão de Crista)
Diferentes bibliotecas podem usar constantes ligeiramente diferentes (por exemplo, omitindo (1/(2n)), usando (|\beta|_2) vs (|\beta|_2^2)), mas o comportamento é o mesmo: L1 + L2.
Penalidade da Rede Elástica para modelos lineares generalizados (generalized linear models) (por exemplo, regressão logística (logistic regression))
A Rede Elástica também é amplamente usada com modelos de classificação como regressão logística. Nesse caso, o termo de erro quadrático é substituído por uma log-verossimilhança negativa (negative log-likelihood) (entropia cruzada (cross-entropy)):
[ \min_{\beta, b}\ \mathcal{L}(\beta, b)\ +\ \lambda\left(\alpha|\beta|_1 + \frac{1-\alpha}{2}|\beta|_2^2\right) ]
onde (\mathcal{L}) é a perda logística (logistic loss) (veja Regressão Logística).
Por que a Rede Elástica? Esparsidade *e* tratamento de multicolinearidade
A fraqueza do LASSO com preditores correlacionados
O LASSO tende a selecionar um atributo de um grupo de atributos fortemente correlacionados e definir o restante como zero. Isso pode ser desejável se você quer um modelo muito esparso, mas também pode ser instável: pequenas perturbações nos dados podem fazer com que ele escolha um atributo diferente dentro do grupo.
A fraqueza da crista: sem seleção de atributos
A regressão de crista reduz coeficientes suavemente e tende a manter atributos correlacionados com pesos semelhantes, mas raramente leva coeficientes exatamente a zero. Isso é ótimo para estabilidade, mas não é ideal quando você quer um subconjunto compacto e interpretável de atributos.
O “efeito de grupo” da Rede Elástica
Ao adicionar um componente L2, a Rede Elástica tende a:
- Manter grupos de atributos correlacionados juntos (coeficientes semelhantes)
- Ainda obter esparsidade ao empurrar alguns coeficientes exatamente para zero
Isso costuma ser chamado de efeito de agrupamento (grouping effect) e é um motivo central para a popularidade da Rede Elástica em texto e genômica, onde preditores correlacionados são comuns.
Como os hiperparâmetros afetam a solução
O parâmetro de mistura \(\alpha\): comportamento L1 vs L2
Pense em (\alpha) como controlando quão esparsa versus quão agrupada/estável você quer que a solução seja:
(\alpha) mais alto (mais perto de 1):
- Mais parecido com LASSO
- Mais coeficientes exatamente zero
- Seleção de atributos mais agressiva
- Potencialmente menos estável com preditores correlacionados
(\alpha) mais baixo (mais perto de 0):
- Mais parecido com crista
- Menos zeros exatos
- Melhor estabilidade com preditores correlacionados
- Menos “seleção automática de atributos”
Na prática:
- (\alpha) costuma ser ajustado em um conjunto pequeno como ({0.1, 0.5, 0.9, 1.0}).
- Muitos fluxos de trabalho usam (\alpha = 0.5) como um ponto de partida razoável.
A força de regularização \(\lambda\): encolhimento geral
(\lambda) controla quão fortemente os coeficientes são penalizados:
- (\lambda = 0): sem regularização (reduz a mínimos quadrados ordinários)
- (\lambda) maior:
- Magnitudes de coeficientes menores (mais encolhimento)
- Mais coeficientes levados a zero (quando (\alpha > 0))
- Maior viés (bias) mas menor variância (variance) (frequentemente melhorando a generalização)
Um modelo mental útil: (\lambda) define principalmente “quão simples” o modelo deve ser, enquanto (\alpha) define “que tipo de simplicidade” (esparsa vs suave).
Intuição geométrica (por que L1 cria zeros)
Regressão regularizada pode ser vista como minimizar a perda sujeita a uma restrição (constraint) nos coeficientes.
- A crista usa uma restrição L2 (uma hiperesfera (hypersphere)), que raramente toca os eixos → coeficientes raramente se tornam exatamente zero.
- O LASSO usa uma restrição L1 (um diamante / politopo cruzado (cross-polytope)), que tem cantos alinhados com os eixos → soluções frequentemente caem nos eixos → zeros exatos.
- A restrição da Rede Elástica é como um diamante arredondado: ela ainda tem comportamento “meio com cantos” (esparsidade), mas é mais suave e estável com atributos correlacionados.
Otimização e computação
A Rede Elástica é convexa (convex) (para regressão linear e regressão logística), então tem um único ótimo global (global optimum).
Solucionadores (solvers) comuns:
- Descida por coordenadas (coordinate descent) (muito comum; usada pelo glmnet e por muitas implementações de Rede Elástica)
- Eficiente quando muitos coeficientes se tornam zero
- Naturalmente suporta calcular um caminho de regularização (regularization path) sobre muitos valores de (\lambda) via inicializações quentes (warm starts)
- Métodos estocásticos (stochastic methods) como variantes de Descida do Gradiente (mais comuns em cenários de grande escala / online)
- Para regressão logística com Rede Elástica no scikit-learn, o solucionador SAGA é comumente usado.
Na prática, você normalmente não implementa o solucionador por conta própria — você escolhe a biblioteca certa e ajusta os hiperparâmetros com cuidado.
Considerações práticas de ajuste
1) Escalonamento de atributos (feature scaling) é (quase sempre) obrigatório
Como a penalidade depende diretamente das magnitudes dos coeficientes, a escala dos atributos afeta fortemente a Rede Elástica. Se um atributo é medido em milhares e outro em frações, o modelo irá penalizá-los de forma desigual.
Boa prática:
- Padronize (standardize) atributos numéricos (média zero, variância unitária)
- Use um pipeline (pipeline) para que o escalonamento seja aplicado de forma idêntica durante a validação cruzada e a inferência (inference)
A maioria das bibliotecas:
- exige escalonamento explicitamente (recomendado), ou
- oferece uma opção para normalizar internamente (menos flexível; pipelines geralmente são mais claros)
2) Use validação cruzada para escolher \(\lambda\) e frequentemente \(\alpha\)
A Rede Elástica introduz duas dimensões de ajuste. Uma abordagem padrão é:
- Escolher uma grade (grid) de (\alpha) (frequentemente chamada
l1_ratio) - Para cada (\alpha), executar validação cruzada (cross-validation) para escolher o melhor (\lambda)
- Selecionar o par ((\alpha, \lambda)) com a melhor métrica de validação (validation score)
Isso normalmente é feito com Validação Cruzada, usando:
- MSE / MAE para regressão
- log loss / acurácia / AUC para classificação
Se você tiver dados suficientes, considere validação cruzada aninhada (nested cross-validation) para estimativas de desempenho sem viés quando fizer um ajuste extensivo.
3) Interpretabilidade: esparso nem sempre significa “causal”
Coeficientes da Rede Elástica são frequentemente usados para interpretação porque são lineares e podem ser esparsos. Mas tenha em mente:
- Coeficientes refletem associação (association) sob as suposições do modelo
- Preditores correlacionados complicam a atribuição (attribution) (coeficientes podem “compartilhar” sinal)
- A regularização introduz viés (coeficientes são encolhidos)
Se interpretabilidade for o objetivo, considere relatar:
- atributos selecionados com coeficiente não zero
- coeficientes padronizados
- estabilidade ao longo das dobras de validação cruzada ou de amostras de reamostragem bootstrap (bootstrap)
4) Tratamento de variáveis categóricas e matrizes esparsas
A Rede Elástica é popular para:
- Atributos categóricos codificados em one-hot (alta dimensionalidade, correlacionados)
- Atributos de texto do tipo saco de palavras (bag-of-words) / TF-IDF (muito alta dimensionalidade, esparsos)
Muitas implementações lidam eficientemente com matrizes esparsas; garanta que o solucionador escolhido oferece suporte a elas.
Exemplos práticos
Exemplo 1: Regressão com Rede Elástica usando scikit-learn (pipeline recomendado)
Este exemplo mostra:
- escalonamento de atributos com
StandardScaler - ajuste de (\alpha) (
l1_ratio) e (\lambda) (alphana terminologia doElasticNetCVdo scikit-learn)
import numpy as np
from sklearn.datasets import make_regression
from sklearn.linear_model import ElasticNetCV
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
# Synthetic regression data with correlated-ish features
X, y = make_regression(
n_samples=2000, n_features=200, n_informative=20,
noise=15.0, random_state=0
)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=0
)
model = Pipeline([
("scaler", StandardScaler()),
("enet", ElasticNetCV(
l1_ratio=[0.1, 0.5, 0.9, 1.0], # alpha in math notation
alphas=np.logspace(-3, 1, 50), # lambda values (scikit calls this alpha)
cv=5,
max_iter=20000
))
])
model.fit(X_train, y_train)
enet = model.named_steps["enet"]
print("Chosen l1_ratio:", enet.l1_ratio_)
print("Chosen alpha (lambda):", enet.alpha_)
test_r2 = model.score(X_test, y_test)
print("Test R^2:", test_r2)
# How sparse is the solution?
num_nonzero = np.sum(enet.coef_ != 0)
print("Non-zero coefficients:", num_nonzero, "out of", X.shape[1])
Notas sobre a nomenclatura no scikit-learn:
l1_ratiocorresponde a (\alpha) (mistura entre L1 e L2)alphacorresponde aproximadamente a (\lambda) (força geral)
Exemplo 2: Regressão logística com Rede Elástica (classificação)
No scikit-learn, a Rede Elástica para regressão logística é exposta via LogisticRegression com:
penalty="elasticnet"solver="saga"l1_ratiocontrola a misturaCé o inverso da força da regularização (regularization strength) (Cmaior = regularização mais fraca)
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import GridSearchCV
X, y = make_classification(
n_samples=5000, n_features=1000, n_informative=50,
random_state=0
)
pipe = Pipeline([
("scaler", StandardScaler(with_mean=False)), # often needed for sparse data
("clf", LogisticRegression(
penalty="elasticnet",
solver="saga",
max_iter=5000
))
])
param_grid = {
"clf__l1_ratio": [0.1, 0.5, 0.9],
"clf__C": [0.05, 0.1, 0.2, 0.5, 1.0] # inverse of regularization strength
}
search = GridSearchCV(pipe, param_grid=param_grid, cv=5, n_jobs=-1)
search.fit(X, y)
print("Best params:", search.best_params_)
Dica prática: para entradas esparsas de dimensionalidade muito alta (por exemplo, TF-IDF), você pode evitar centralização (por isso with_mean=False) para manter as matrizes esparsas e eficientes em memória.
Quando usar a Rede Elástica
A Rede Elástica é uma escolha forte quando:
- Você quer uma linha de base (baseline) linear que seja competitiva e difícil de sobreajustar
- Você espera muitos atributos irrelevantes e quer esparsidade
- Atributos são correlacionados e você quer mais estabilidade do que com LASSO
- Você tem dados de alta dimensionalidade, possivelmente com (p \gg n)
- Você quer um modelo rápido, convexo e relativamente interpretável
Domínios de aplicação comuns:
- Classificação de texto / modelos de sentimento com TF-IDF ou n-gramas
- Genômica e bioinformática (muitas medições correlacionadas)
- Marketing e econometria com muitos atributos engenheirados e sobrepostos
- Qualquer pipeline de ML tabular como uma boa linha de base antes de modelos não lineares
Quando a Rede Elástica pode não ser ideal
Considere alternativas quando:
- A relação é fortemente não linear (tente árvores/boosting ou kernels)
- Você precisa de esparsidade estruturada (por exemplo, variantes de group lasso)
- Você precisa de intervalos de incerteza calibrados sob suposições estatísticas específicas (modelos estatísticos especializados podem ser melhores)
- Você tem outliers severos e quer regressão robusta (considere Huber / regressão quantílica com regularização apropriada)
A Rede Elástica pode ser combinada com perdas robustas, mas esse é um objetivo diferente do clássico da Rede Elástica com perda quadrática.
Armadilhas comuns e boas práticas
- Sempre escale os atributos (ou use um pipeline que faça isso).
- Não ajuste no conjunto de teste: selecione (\alpha) e (\lambda) via validação cruzada apenas nos dados de treino.
- Tenha cuidado ao interpretar atributos selecionados quando preditores são correlacionados — a Rede Elástica pode manter vários atributos correlacionados, e as magnitudes dos coeficientes podem mudar entre dobras.
- Verifique a convergência (
max_iter) e avisos do solucionador; aumente iterações ou ajuste tolerâncias se necessário. - Reporte esparsidade e estabilidade, não apenas acurácia — especialmente quando a Rede Elástica é usada para seleção de atributos.
Conceitos relacionados
- Regressão LASSO para esparsidade L1 pura
- Regressão de Crista para encolhimento L2 puro e estabilidade
- Regularização para o princípio geral e motivação
- Validação Cruzada para metodologia de ajuste de hiperparâmetros
- Descida do Gradiente e métodos de otimização relacionados usados por muitos solucionadores
- Regressão Logística para classificação com fronteiras de decisão lineares e objetivos regularizados