Classificação com Máquina de Vetores de Suporte (SVM)

A ideia básica contida em uma Support Vector Machine (SVM) é a de separar conjuntos de objetos que pertençam a diferentes classes. A figura abaixo ilustra.


Exemplo de aplicação de um SVM

A definição do hiperplano que dividirá as diferentes classes passa por um algoritmo de aprendizado supervisionado. Esse plano delimitado dividirá o espaço criando partições homogêneas de cada lado.

SVMs podem ser adaptados para uso em qualquer tipo de tarefa de aprendizado, incluindo problemas de classificação e também de previsão numérica. A seguir, algumas clássicas aplicações:

  • Identificação de doenças genéticas;
  • Categorização de textos, como identificação da linguagem utilizada;
  • Identificação de falhas em motores à combustão, falhas de segurança ou terremotos.

SVMs são mais facilmente entendidos quando utilizados para classificações binárias, onde o método tem sido tradicionalmente aplicado.

O nome Support Vector Machine, diga-se, é uma generalização de um classificador simples denominado maximal margin classifier, que separa as classes do conjunto com base em uma fronteira linear. Uma primeira extensão desse classificador simples é o support vector classifier, que pode ser aplicado a um leque maior de casos. Nesse contexto, o SVM é uma extensão desse último, de modo a acomodar fronteiras não-lineares.

Para aprender mais e ter acesso a códigos confira o curso de Modelagem e Previsão usando Python ou comece do zero em análise de dados com a formação Do Zero à Análise de Dados com Python.

O que é um hiperplano?

Em um espaço de dimensão p, um hiperplano é um subespaço afinado plano de dimensão p-1.  Isso dito, em duas dimensões, um hiperplano será uma linha, já em três dimensões será um plano. Em duas dimensões, um hiperplano pode ser definido como:

    \[\beta_0 + \beta_1 X_1 + \beta_2 X_2 = 0\]

Para p dimensões, basta fazermos

    \[\beta_0 + \beta_1 X_1 + \beta_2 X_2 + ... + \beta_p X_p = 0 \label{hiperplano}\]

Assim, quando X não satisfaz , ou

    \[\beta_0 + \beta_1 X_1 + \beta_2 X_2 + ... + \beta_p X_p > 0 \label{oneside}\]

Ou então,

    \[\beta_0 + \beta_1 X_1 + \beta_2 X_2 + ... + \beta_p X_p < 0 \label{otherside}\]

De modo que podemos pensar no hiperplano dividindo o espaço de dimensão p em duas metades.

Ilustrando um hiperplano

Classificação usando um hiperplano

Suponha agora que nós temos um matriz n \times p X de dados que consiste em n observações de treino no espaço p,

de modo que essas observações caem em duas classes, isto é, y_1,...,y_n \in \left \{-1,1 \right \}, onde -1 representa uma classe e 1 representa a outra.

Nós também temos uma observação de teste, um vetor p de variáveis observadas x^{q} = (x_1^{q} ... x_{p}^{q})^T.

Nosso objetivo será o de desenvolver um classificador baseado nos dados de treino que irá classificar corretamente as observações de teste usando as características de medição.

Suponha então que seja possível construir um hiperplano que separe as observações de treino de acordo com os labels de suas classes.

 

Usando um hiperplano para classificação

Podemos nomear as observações azuis como sendo y_i = 1 e as roxas como y_i = -1. Assim, o hiperplano irá aplicar

\beta_0 + \beta_1 X_1 + \beta_2 X_2 + ... + \beta_p X_p > 0 se y_1 = 1 e

\beta_0 + \beta_1 X_1 + \beta_2 X_2 + ... + \beta_p X_p < 0 se y_i = -1.

Assim, a observação de teste é alocada a uma classe a depender de qual lado esteja do hiperplano.

Maximal Margin Classifier

De forma geral, se nossos dados podem ser separados de forma perfeita usando um hiperplano, existirá um número infinito de possibilidades. Na figura 3, por exemplo, vimos três possibilidades de hiperplanos. Precisamos então escolher qual deles iremos utilizar para separar nossas observações.

Podemos usar para isso o classificador de margem máxima. Observe, por exemplo, a figura abaixo:

Ilustrando um hiperplano

Há novamente duas classes de observações, mostradas em azul e roxo. O hiperplano de margem máxima é mostrado como sendo uma linha sólida. A margem será então a distância da linha sólida até as linhas tracejadas. As linhas azuis e roxas que se encontram nas linhas tracejadas são os vetores de suporte e a distância desses pontos até o hiperplano é indicado pelas flechas. Por fim, as grades roxas e azuis indicam a regra de decisão feita por um classificador baseado no hiperplano de separação.

Em termos mais formais, considere um conjunto de observações de treino x_1,...,x_p \in \mathbb{R}^{p} e as classes y_1, ..., y_n \in \left \{-1,1 \right \}. O hiperplano de margem máxima será então a solução para o problema de otimização dado por

De modo que as restrições garantem que cada observação estará no lado correto do hiperplano e ao menos à distância M do hiperplano. M representa assim a margem do nosso hiperplano e o problema de otimização escolhe \beta_0, \beta_1,..., \beta_p de modo a maximizar M.

Support Vector Classifiers

Classes não separáveis por um hiperplano
Sensibilidade a observações individuais

O fato do hiperplano de margem máxima ser extremamente sensível a mudanças em uma única observação sugere que estamos incorrendo em problema de overfit.

Nesse caso, nós podemos considerar um classificador baseado em hiperplano que não separe de forma perfeita as duas classes, de modo a

  • Aumentar a robustez a observações individuais
  • Melhor classificar da maioria das observações de treino

Assim, nós permitimos que algumas observações estejam colocadas no lado errado do hiperplano.

Sensibilidade a observações individuais

O problema passa a ser colocado nos seguintes termos

onde C é um parâmetro de sintonia não-negativo.

A solução do problema nos dará o nosso classificador. Ele irá classificar uma observação de teste a depender de qual lado do hiperplano ela estará. O hiperplano é escolhido de modo a separar a maioria das observações de treino em duas classes, mas pode classificar de forma errada algumas das observações.

As variáveis de folga \varepsilon_1, ..., \varepsilon_n é que irão permitir que as observações individuais estejam do lado errado da margem ou do hiperplano. Se \varepsilon_i = 0, a observação i estará no lado correto da margem. Se \varepsilon_i > 0, ela estará no lado errado da margem. Por fim, se \varepsilon_i > 1, ela estará do lado errado do hiperplano.

O parâmetro C, nesse contexto, é quem dará o controle sobre o quanto nós toleramos que as observações violem a margem e o hiperplano. Se C=0, nós não toleramos violação. Maiores valores para C implicam em maior tolerância na violação.

Diferentes valores para C

Support Vector Machine

support vector classifier é uma abordagem natural para classificação se a fronteira entre as duas classes for linear. O problema é quando enfrentamos limites não-lineares.

Performance ruim

support vector machine, nesse contexto, será uma extensão do support vector classifier no sentido de ampliar o espaço X_1, X_2,..., X_p utilizando para isso kernels.

Para explicar como os SVMs funcionam, vamos voltar ao problema de otimização que dá origem ao support vector classifier. A solução para aquele problema envolve apenas o produto interno das observações. De modo a relembrar, o produto interno entre dois vetores a e b é definido como \left \langle a,b \right \rangle = \sum_{i=1}^{r} a_i b_i. Assim, o produto interno de duas observações x_i, x_i^{´} será dado por

    \[\left \langle x_i, x_i^{´} \right \rangle = \sum_{j=1}^{p} x_{ij} x_{ij}^{´} \label{inner}\]

De modo que o support vector classifier pode ser representado por

    \[f(x) = \beta_0 + \sum_{i=1}^{n} \alpha_i \left \langle x, x_i \right \rangle,\]

onde há n parâmetros \alpha_i, um por observação de treino. De modo a estimar os parâmetros \alpha_1, ..., \alpha_n e \beta_0, tudo o que precisamos será do \binom{n}{2} produtos internos \left \langle x_i, x_i^{´} \right \rangle entre todos os pares de observações de treino.

Isso dito, suponha que sempre o produto interno aparecer na representação do nosso support vector classifier ou no cálculo da solução para o classificador, nós o substituímos com uma generalização do produto interno na forma

    \[K(x_i, x_i^{´}), \label{kernel}\]

onde K é uma função referida como kernel.

Feito isso, nós podemos pegar

    \[K(x_i, x_i^{´}) = \sum_{j=1}^{p} x_{ij} x_{ij}^{´} \label{svc}\]

O que nos dá de volta o nosso classificador. A equação  é denominada linear porque o classificador será linear nas variáveis.

Podemos, contudo, substituir a forma de  por

    \[K(x_i, x_i^{´}) = (1 + \sum_{j=1}^{p} x_i, x_i^{´})^{d}, \label{kernel2}\]

conhecido como kernel polinomial de grau d. Com d > 1, temos fronteiras de decisão mais flexíveis do que aquelas impostas pelo nosso classificador anterior. Quando nosso support vector classifier é combinado com , nós temos como resultado o support vector machine.

Exemplos de SVM

Conclusão

Neste artigo mostramos como funciona o algoritmo SVM para problemas de classificação. Desenvolvemos a intuição com exemplos gráficos e mostramos aplicações para dados econômicos usando R e Python.

Quer aprender mais?

  •  Cadastre-se gratuitamente aqui no Boletim AM e receba toda terça-feira pela manhã nossa newsletter com um compilado dos nossos exercícios com exemplos reais de análise de dados envolvendo as áreas de Data Science, Econometria, Machine Learning, Macroeconomia Aplicada, Finanças Quantitativas e Políticas Públicas;
  •  Quer ter acesso aos códigos, vídeos e scripts de R/Python desse exercício? Vire membro do Clube AM aqui e tenha acesso à nossa Comunidade de Análise de Dados;
  •  Quer aprender a programar em R ou Python com Cursos Aplicados e diretos ao ponto em Data Science, Econometria, Machine Learning, Macroeconomia Aplicada, Finanças Quantitativas e Políticas Públicas? Veja nossos Cursos aqui.

Referências

B. E. Boser, I. M. Guyon, and V. N. Vapnik. A Training Algorithm for Optimal Margin Classifiers. Annual Workshop on computacional learning, 5:144–152, July 1992.

Brett Lantz. Machine Learning with R. Packt Publishing, 2013.

G. James, D. Witten, T. Hastie, and R. Tibshirani. An Introduction to Statistical Learning with applications in R. Springer, 2017.

 

 

 

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Análise de impacto fiscal sobre o dolár com Python

Usamos uma cesta de 12 moedas para construir um cenário contrafactual da taxa de câmbio após o último anúncio de pacote fiscal, com base em modelagem Bayesiana. No período, o dolár depreciou quase 5% e passou os R$ 6,15, enquanto que na ausência da intervenção a moeda deveria estar cotada em R$ 5,78.

Resultado IBC-br - Outubro/2024

A Análise Macro apresenta os resultados da IBC-br de Outubro de 2024, com gráficos elaborados em Python para coleta, tratamento e visualização de dados. Todo o conteúdo, disponível exclusivamente no Clube AM, foi desenvolvido com base nos métodos ensinados nos cursos da Análise Macro, permitindo aos assinantes acesso aos códigos e replicação das análises.

Resultado PMC - Outubro/2024

A Análise Macro apresenta os resultados da PMC de Outubro de 2024, com gráficos elaborados em Python para coleta, tratamento e visualização de dados. Todo o conteúdo, disponível exclusivamente no Clube AM, foi desenvolvido com base nos métodos ensinados nos cursos da Análise Macro, permitindo aos assinantes acesso aos códigos e replicação das análises.

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.