Máquinas de Vetores de Suporte (SVM)

Continuando nossa exploração do guia do scikit-learn, chegamos a um dos algoritmos mais influentes e amplamente utilizados no machine learning: as Máquinas de Vetores de Suporte (SVM). Primordialmente, as SVM representam uma abordagem elegante baseada em teoria de aprendizado estatístico que combina princípios de maximização de margens com a flexibilidade dos métodos de kernel.

Conceitos Fundamentais

Analogamente aos classificadores lineares que discutimos anteriormente, as SVM buscam encontrar um hiperplano ótimo para separar classes. Contudo, a abordagem das SVM é distintiva pois focaliza na maximização da margem entre as classes, o que frequentemente leva a melhor generalização.

O Hiperplano Ótimo

As SVM buscam o hiperplano que maximiza a margem entre as classes mais próximas:

\(w^T x + b = 0\)

Onde w é o vetor normal ao hiperplano e b é o termo de bias. A margem é definida pelas linhas paralelas:

\(w^T x + b = \pm 1\)

Formulação Matemática

Problema de Otimização

O problema de otimização das SVM pode ser formulado como:

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

Sujeito a:

\(y_i(w^T x_i + b) \geq 1 \quad \text{para } i = 1, \dots, n\)

Forma Dual e Vetores de Suporte

Através da formulação dual, obtemos:

\(\max_{\alpha} \sum_{i=1}^n \alpha_i – \frac{1}{2} \sum_{i=1}^n \sum_{j=1}^n \alpha_i \alpha_j y_i y_j x_i^T x_j\)

Sujeito a:

\(\alpha_i \geq 0 \quad \text{e} \quad \sum_{i=1}^n \alpha_i y_i = 0\)

Os pontos com α_i > 0 são os vetores de suporte, que definem o hiperplano de decisão.

SVM com Margem Suave

Para dados não linearmente separáveis, introduzimos variáveis de folga (slack variables):

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

Sujeito a:

\(y_i(w^T x_i + b) \geq 1 – \xi_i \quad \text{e} \quad \xi_i \geq 0\)

O parâmetro C controla o trade-off entre maximização da margem e minimização do erro de classificação.

Kernels em SVM

Similarmente à Regressão de Crista do Kernel que exploramos anteriormente, as SVM podem utilizar kernels para lidar com dados não linearmente separáveis:

  • linear: \(K(x_i, x_j) = x_i^T x_j\)
  • polynomial: \(K(x_i, x_j) = (\gamma x_i^T x_j + r)^d\)
  • rbf: \(K(x_i, x_j) = \exp(-\gamma \|x_i – x_j\|^2)\)
  • sigmoid: \(K(x_i, x_j) = \tanh(\gamma x_i^T x_j + r)\)

Implementação no scikit-learn

O scikit-learn oferece duas implementações principais de SVM:

SVC (Support Vector Classification)

Baseada na biblioteca libsvm, oferece suporte a múltiplas classes através das estratégias “one-vs-one” ou “one-vs-rest”.

LinearSVC

Implementação otimizada para kernels lineares, baseada na biblioteca liblinear, geralmente mais eficiente para datasets grandes.

Parâmetros Principais

  • C: Parâmetro de regularização (trade-off margem/erro)
  • kernel: Tipo de função kernel
  • gamma: Coeficiente para kernels RBF, polinomial e sigmoid
  • degree: Grau do kernel polinomial
  • probability: Se deve habilitar estimativas de probabilidade

Conexões com Tópicos Anteriores

Similarmente às técnicas que exploramos anteriormente, as SVM compartilham conceitos fundamentais:

  • Utilizam regularização como a Regressão Ridge
  • Aproveitam o truque do kernel como a Regressão de Crista do Kernel
  • São baseadas em produtos internos como métodos de projeção linear
  • Oferecem garantias teóricas de generalização

Vantagens e Desvantagens

Vantagens

  • Eficazes em espaços de alta dimensionalidade
  • Boa performance com dados não linearmente separáveis
  • Robustas a overfitting em configurações apropriadas
  • Base teórica sólida em teoria de aprendizado estatístico

Desvantagens

  • Computacionalmente intensivas para datasets muito grandes
  • Performance sensível à escolha de parâmetros
  • Dificuldade de interpretação com kernels não-lineares
  • Não fornecem estimativas de probabilidade diretamente

Exemplo Prático em Python

Para ilustrar a aplicação das SVM em diferentes cenários, implementemos um estudo comparativo detalhado:

Interpretação dos Resultados

Analisando os experimentos comparativos, podemos observar padrões importantes:

  • Modelos lineares performam bem em dados linearmente separáveis
  • SVM com kernel RBF são mais flexíveis para dados complexos
  • O número de vetores de suporte indica a complexidade da fronteira
  • O parâmetro C tem impacto significativo na performance

Considerações Avançadas

SVM para Problemas Multiclasse

O scikit-learn implementa duas estratégias para problemas multiclasse:

  • one-vs-rest (OvR): Um classificador por classe vs todas as outras
  • one-vs-one (OvO): Um classificador para cada par de classes

Estimativas de Probabilidade

Embora SVM sejam originalmente classificadores determinísticos, o scikit-learn oferece a opção probability=True que utiliza Platt scaling para gerar estimativas probabilísticas.

Boas Práticas

Inegavelmente, para obter os melhores resultados com SVM:

  • Sempre padronize os dados antes do treinamento
  • Use validação cruzada para tuning de hiperparâmetros
  • Comece com kernel RBF como primeira abordagem
  • Considere a complexidade computacional para datasets grandes
  • Analise os vetores de suporte para entender o modelo

Conclusão

As Máquinas de Vetores de Suporte representam uma ferramenta poderosa e versátil no arsenal de machine learning. Embora tenham sido desenvolvidas décadas atrás, continuam sendo relevantes devido à sua fundamentação teórica sólida e performance prática consistente.

Portanto, o domínio das SVM é essencial para qualquer praticante de machine learning, oferecendo uma abordagem robusta para problemas de classificação que vai desde casos linearmente separáveis até relações complexas não-lineares.

Referência

Este post explora o item 1.4. Máquinas de Vetores de Suporte da documentação do scikit-learn:

https://scikit-learn.org/0.21/modules/svm.html