Machine Learning · Insper

Máquinas de Vetores de Suporte

Abordagem fundamental

SVM (máquina de vetores de suporte): entre infinitas retas que separam, qual escolher — e por quê

O caminho desta parte

  1. A rua mais largamuitas retas separam; a margem escolhe
  2. Geometria à mãomargem com sinal, o problema de otimização, vetores de suporte
  3. Margem suave e Cfolga, perda hinge, o que o C compra
Cada etapa responde a uma pergunta: qual reta separadora escolher? → como achar a rua mais larga? → e se as classes se sobrepõem?
Etapa 1 · Qual reta separadora escolher?

Muitas retas separam — qual escolher?

Preveja. As três retas da esquerda acertam todos os pontos de treino. Em qual você confiaria para um ponto novo?

Três retas separadoras passam muito perto de algum ponto; a de margem máxima mantém todos a pelo menos 1,14
  • As três da esquerda têm 100% de acurácia no treino e passam a 0,31–0,45 de algum ponto.
  • A de margem máxima mantém todo ponto a pelo menos 1,14; a rua tem 2,28 de largura.
A acurácia não consegue escolher: a resposta da SVM é geométrica — a rua mais larga entre as classes. Os pontos nas bordas são os vetores de suporte.
Etapa 2 · Como achar a rua mais larga?

A margem com sinal

As SVMs usam \(y \in \{-1, +1\}\), o que torna central uma grandeza:

\[ m = y \cdot f(x), \qquad f(x) = w^\top x + b \]

\(x\): um ponto; \(y\): o seu rótulo; \(w\): o vetor de pesos, perpendicular à fronteira; \(b\): o intercepto. A fronteira é \(f(x) = 0\).

\(m > 0\): o ponto está do lado certo; \(m\) grande: está longe da fronteira.

E a distância de um ponto ao hiperplano:

\[ \text{distância}(x) = \frac{\lvert w^\top x + b \rvert}{\lVert w \rVert} \]
A escala de \(w, b\) é livre, então a SVM a fixa: \(\lvert f \rvert = 1\) nos pontos mais próximos. Eles ficam a \(1/\lVert w \rVert\) da fronteira e a rua mede \(2/\lVert w \rVert\).

O problema de otimização

\[ \min_{w, b} \; \tfrac{1}{2}\lVert w \rVert^2 \quad \text{sujeito a} \quad y_i(w^\top x_i + b) \geq 1 \;\; \forall i \]

\((x_i, y_i)\): o \(i\)-ésimo ponto de treino e o seu rótulo. A restrição diz: todo ponto do lado certo e fora da rua.

  • maximizar a rua \(2/\lVert w \rVert\) é minimizar \(\lVert w \rVert\);
  • é um programa quadrático convexo: um único ótimo global, sem inicialização aleatória, sem taxa de aprendizado.
Ao contrário do k-means, que depende do ponto de partida aleatório, não há ótimo local onde ficar preso: sem semente nem taxa de aprendizado; rodar duas vezes dá exatamente a mesma resposta.

Seis pontos, resolvidos à mão

ponto\(x_1\)\(x_2\)\(y\)
A00−1
B10−1
C01−1
D22+1
E32+1
F23+1

Por simetria, \(w = (a, a)\). Os negativos mais próximos (B, C) estão em \(x_1 + x_2 = 1\); o positivo mais próximo (D) em 4. A fronteira fica no meio, em 2,5:

\[ 4a + b = 1,\quad a + b = -1 \;\Rightarrow\; a = \tfrac{2}{3},\; b = -\tfrac{5}{3} \] \[ \lVert w \rVert = 0{,}943 \quad\Rightarrow\quad \text{rua} = 2{,}121 \]

A biblioteca confirma: w = [0.667 0.667], b = −1.667, largura 2,121, vetores de suporte B, C e D.

Só os vetores de suporte importam

Preveja. Apague E e reajuste; depois apague D e reajuste. Qual das duas remoções move a reta?

\[ w = \sum_i \alpha_i \, y_i \, x_i, \qquad \alpha_i = 0 \;\text{ para todo ponto além da margem} \]

\(\alpha_i \geq 0\): um peso por ponto de treino, encontrado pelo solver. Aqui \(\alpha_i y_i = -\tfrac{2}{9}\) para B e C, \(\tfrac{4}{9}\) para D e 0 para A, E e F: \( w = -\tfrac{2}{9}(1, 0) - \tfrac{2}{9}(0, 1) + \tfrac{4}{9}(2, 2) = (\tfrac{2}{3}, \tfrac{2}{3}) \).

ponto removido\(w\)largura
E = (3, 2) — não é vetor de suporte(0,667; 0,667)2,121 (igual)
D = (2, 2) — é vetor de suporte(0,5; 0,5)2,828
Três pontos de seis carregam o modelo inteiro. Apagar um que não é vetor de suporte não muda nada; apagar um vetor de suporte muda a resposta. A regressão logística não é assim: lá todo ponto tem peso.
Etapa 3 · E se as classes se sobrepõem?

Classes que se sobrepõem: margem suave

\[ \min_{w,b,\xi} \; \tfrac{1}{2}\lVert w \rVert^2 + C \sum_i \xi_i \quad \text{com} \quad y_i f(x_i) \geq 1 - \xi_i, \; \xi_i \geq 0 \]

\(\xi_i\): a folga, quanto o ponto \(i\) passou da borda da sua rua; \(C\): o preço de uma unidade de folga; \(m_i = y_i f(x_i)\), a sua margem com sinal.

A folga mais barata é \(\xi_i = \max(0,\, 1 - m_i)\) — a perda hinge. Substituindo:

\[ \min_{w,b} \; \tfrac{1}{2}\lVert w \rVert^2 + C \sum_i \max(0,\, 1 - y_i f(x_i)) \]
Compare com a regressão logística do scikit-learn: mesma forma, mesmo \(C\) no mesmo lugar. A única diferença entre os dois classificadores é a perda.

Hinge contra log loss

Preveja. Quatro pontos da classe \(+1\), avaliados com a solução dos seis pontos. Quais não custam nada na hinge? E na log loss?

A perda hinge é zero para m ≥ 1 e a log loss é positiva em todo lugar; a perda 0-1 é um degrau
ponto\(m = y f(x)\)hingelog loss
(3, 3)2,3330,0000,093
(2, 2)1,0000,0000,313
(1,5; 1,5)0,3330,6670,540
(1; 0,5)−0,6671,6671,081
A hinge é exatamente zero para \(m \geq 1\); a log loss nunca é. Por isso a regressão logística ainda "escuta" um ponto bem classificado e a SVM não.

As duas são convexas, por isso dá para otimizá-las com confiança. A hinge é, além disso, uma cota superior da perda 0-1; a log loss, com o logaritmo natural, não chega a ser: fica abaixo de 1 para \(-0{,}54 < m \leq 0\).

O que o C faz, medido

\(C\)largura da ruavetores de suportetreinoCV (validação cruzada)
0,0019,23780,991,000
0,015,13271,000,990
0,12,63121,001,000
11,3361,000,990
1000,3931,000,990
SVM linear com C = 0,01, 1 e 100: a rua se estreita de 5,13 para 0,39 e os vetores de suporte caem de 27 para 3
\(C\) pequeno = violações baratas = rua larga = muitos vetores de suporte. O número de vetores de suporte é uma leitura direta de quão regularizado está o modelo.

Simulador: o que o C compra

Preveja. Deslize o \(C\) de pequeno a grande. O que acontece com a largura da rua e com o número de vetores de suporte? Depois arraste um ponto longe da rua: a reta se move?

A SVM linear em cinco linhas

  1. A margem é a régua: a rua de largura \(2/\lVert w \rVert\).
  2. Maximizar a rua = minimizar \(\lVert w \rVert\), com \(y_i f(x_i) \geq 1\). Convexo: um ótimo global.
  3. Só os vetores de suporte importam: \(\alpha_i = 0\) além da margem.
  4. A margem suave cobra \(C\) por violação; a folga é a perda hinge.
  5. O \(C\) é o mesmo da logística: pequeno = forte regularização = rua larga.
sintomao que fazer
quase todo ponto é vetor de suporteaumentar o \(C\)
3 vetores de suporte e treino 1,00diminuir o \(C\); olhar a CV
a fronteira linear não serveo kernel, na parte avançada
Lab fundamental · cerca de 30 min, em duplas

Radar: modelos lineares, passos 1 a 4

  • Ionosphere: 351 retornos de radar, 34 atributos, 64% "bons". Pequeno, de alta dimensão e com fronteira não linear.
  • Notebook no Colab: nada para baixar. Salve uma cópia no seu Drive.
  • Em cada passo, responda o Preveja antes de rodar.
  • Simulações: só os vetores de suporte importam e o C muda a largura da rua (passo 4).

Ritmo: passos 1 a 3 em 10 min; passo 4 e as duas simulações em 20 min.