Modelos Lineares Generalizados: Laço (Lasso)

Anteriormente discutimos a Regressão Linear tradicional e Ridge. Analogamente, o Lasso (Least Absolute Shrinkage and Selection Operator) é outra técnica de regularização que adiciona uma penalidade L1 à função objetivo, promovendo esparsidade nos coeficientes do modelo.

Conceito Fundamental do Lasso

Primordialmente, o Lasso realiza não apenas a regularização dos coeficientes, mas também seleção de features. Decerto, ao adicionar uma penalidade baseada no valor absoluto dos coeficientes, ele tende a zerar os coeficientes de features menos importantes.

Conforme a documentação do scikit-learn, o Lasso é particularmente útil quando acreditamos que apenas um subconjunto das features é realmente relevante para a previsão. Similarmente ao Ridge, ele ajuda a prevenir overfitting, mas com características distintas.

Formulação Matemática

O objetivo do Lasso é minimizar a seguinte função:

\(\min_{w} \frac{1}{2n}||Xw – y||_2^2 + \alpha||w||_1\)

Onde:

  • X é a matriz de features
  • y é o vetor target
  • w são os coeficientes do modelo
  • α é o parâmetro de regularização
  • ||w||₁ é a norma L1 dos coeficientes

Características Principais do Lasso

Inegavelmente, o Lasso possui propriedades únicas que o distinguem de outras técnicas de regularização:

  • Seleção de features: Zera coeficientes de features irrelevantes
  • Esparsidade: Produz modelos com poucas features não-zero
  • Interpretabilidade: Modelos mais simples e interpretáveis
  • Regularização L1: Penalidade baseada no valor absoluto

Comparação: Lasso vs Ridge

Embora ambos sejam técnicas de regularização, existem diferenças fundamentais:

  • Lasso (L1): Promove esparsidade, zera coeficientes
  • Ridge (L2): Reduz coeficientes, mas não zera
  • ElasticNet: Combina L1 e L2

Parâmetros do Lasso

Os principais parâmetros para ajuste no Lasso são:

  1. alpha: Parâmetro de regularização (α)
  2. max_iter: Número máximo de iterações
  3. tol: Tolerância para critério de parada
  4. selection: Estratégia de seleção de coeficientes

Exemplo Prático: Aplicação do Lasso

Ademais, vejamos um exemplo completo demonstrando o uso do Lasso:

Vantagens e Limitações do Lasso

Embora o Lasso seja poderoso, é importante compreender suas características:

Vantagens

  • Seleção automática de features
  • Modelos mais interpretáveis
  • Bom para high-dimensional data
  • Prevenção de overfitting

Limitações

  • Pode selecionar apenas uma feature de grupo correlacionado
  • Sensível à escala dos dados
  • Pode não performar bem quando todas features são relevantes
  • Requer ajuste cuidadoso do parâmetro alpha

Casos de Uso Recomendados

O Lasso é particularmente útil em:

  1. Problemas com muitas features e amostras limitadas
  2. Quando se deseja interpretabilidade do modelo
  3. Para seleção de features automática
  4. Em datasets onde muitas features são irrelevantes

Enfim, o Lasso representa uma ferramenta valiosa no arsenal de machine learning, combinando regularização com seleção de features de maneira eficiente e interpretável.

Referência: https://scikit-learn.org/0.21/modules/linear_model.html#lasso

Máquinas de Vetores de Suporte: Classificação

Anteriormente introduzimos os conceitos fundamentais dos Support Vector Machines. Analogamente, agora exploraremos sua aplicação específica para problemas de classificação, que é uma das utilizações mais comuns e bem-sucedidas desses algoritmos.

Fundamentos da Classificação com SVM

Primordialmente, o SVC (Support Vector Classification) é a implementação do scikit-learn para problemas de classificação. Decerto, seu objetivo é encontrar o hiperplano ótimo que separa as classes com a maior margem possível.

Conforme a documentação, o SVC suporta tanto classificação binária quanto multiclasse através da abordagem “one-vs-one”. Similarmente, para problemas linearmente separáveis, o algoritmo busca maximizar a margem entre as classes.

Formulação Matemática

Para dados linearmente separáveis, o problema de otimização é formulado como:

\(\min_{w,b} \frac{1}{2}||w||^2\)

Sujeito a:

\(y_i(w \cdot x_i + b) \geq 1, \quad \forall i\)

Para dados não linearmente separáveis, introduzimos variáveis de folga:

\(\min_{w,b,\xi} \frac{1}{2}||w||^2 + C\sum_{i=1}^n \xi_i\)

Sujeito a:

\(y_i(w \cdot x_i + b) \geq 1 – \xi_i, \quad \xi_i \geq 0\)

Implementações Disponíveis

Atualmente, o scikit-learn oferece três implementações principais para classificação:

  • SVC: Implementação versátil baseada no libsvm
  • NuSVC: Similar ao SVC mas com parâmetro ν controlando o número de vetores de suporte
  • LinearSVC: Implementação otimizada para classificação linear

Diferenças entre SVC e LinearSVC

Inegavelmente, compreender as diferenças entre essas implementações é crucial:

  • SVC: Suporta kernels não-lineares, usa one-vs-one para multiclasse
  • LinearSVC: Mais escalável, usa one-vs-rest para multiclasse
  • NuSVC: Controla diretamente o número de vetores de suporte

Parâmetros Principais

Conquanto existam muitos parâmetros, alguns são particularmente importantes:

  1. C: Parâmetro de regularização que controla o trade-off entre margem e erro
  2. kernel: Tipo de função do kernel (linear, rbf, poly, sigmoid)
  3. gamma: Coeficiente para kernels rbf, poly e sigmoid
  4. degree: Grau do kernel polinomial

Exemplo Prático: Classificação com Diferentes Kernels

Ademais, vejamos um exemplo completo de classificação utilizando diferentes abordagens:

Casos de Uso e Recomendações

Embora o SVC seja versátil, algumas recomendações práticas são importantes:

Quando Usar SVC

  • Problemas com limites de decisão complexos
  • Quando o número de features é maior que o número de amostras
  • Para problemas que requerem alta generalização
  • Quando se tem recursos computacionais suficientes

Quando Preferir LinearSVC

  • Datasets muito grandes
  • Problemas linearmente separáveis
  • Quando a velocidade é crucial
  • Para problemas com muitas features

Considerações sobre Multiclasse

O scikit-learn implementa duas estratégias para classificação multiclasse:

  1. one-vs-one: Treina um classificador para cada par de classes (usado no SVC)
  2. one-vs-rest: Treina um classificador por classe contra todas as outras (usado no LinearSVC)

Enfim, a classificação com Support Vector Machines oferece uma abordagem robusta e flexível para diversos tipos de problemas, desde os mais simples até os mais complexos, sempre buscando a melhor generalização possível.

Referência: https://scikit-learn.org/0.21/modules/svm.html#classification