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:

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) (alpha na terminologia do ElasticNetCV do 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_ratio corresponde a (\alpha) (mistura entre L1 e L2)
  • alpha corresponde 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_ratio controla a mistura
  • C é o inverso da força da regularização (regularization strength) (C maior = 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