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

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