Support Vector Machine (SVM)

graph

Photo by Isaac Smith on Unsplash

Essas são minhas notas de estudos, elas podem ser atualizadas com o tempo ou não, além de não necessariamente serem organizadas no formato de textos.

Tabela de Conteúdo

Support Vector Machine (SVM)

O modelo SVM é capaz de fazer classificações, regressões e identificar novos dados, sendo possível utilizá-lo para ajustes lineares e não lineares. Este modelo é melhor aplicado em dataset de tamanhos pequenos e médios, e escala bem com o número de features, principalmente se forem esparsas.

Linear SVM para classificação (SVC)

A ideia por trás do algoritmo de SVC é definir uma linha que separa as classes, mas com a condição extra dessa linha estar o mais distante possível das duas classes. A imagem abaixo mostra um exemplo do resultado final do SVC, onde a linha do meio (traço em vermelho) é a linha que separa as classes e as linhas laterais (pontilhadas em preto) são os vetores de suporte, são esses vetores que o algoritmo tenta afastar o máximo possível da linha do meio.

Imagem por Larhmam - Own work, CC BY-SA 4.0, Link

O algoritmo de SVM só pode ser utilizado para classificar duas classes, é um classificador binário. Porém, existem formas de se contornar essa limitação.

O modelo SVM é sensível a escala das features, sendo necessário colocá-las na mesma escala. Além disso, o modelo SVC (SVM linear) também regulariza o termo de bias (constante), sendo necessário centralizar os valores das features.

Para controlar a regularização, utilizamos o hiperparâmetro $C$. Para valores baixos de $C$, permitimos que alguns pontos entrem dentro das margens pontilhadas, chamamos esse efeito de margens suaves (soft margin). Para um valor alto de $C$, não aceitamos pontos dentro das margens pontilhadas, esse efeito é chamado de margem dura (hard margin). Quando o modelo apresenta overfitting, podemos reduzir o valor de $C$ para aplicar uma regularização.

O modelo de SVM não retorna de forma direta as probabilidades para cada classe. Porém existem formas de se obtê-las.

Não Linear SVM para classificação

O modelo de SVM também consegue fazer classificações não lineares. Isso é feito por meio do truque do kernel. A ideia é análoga a de criar features não lineares a partir de features lineares, como por exemplo ao fazermos uma transformação polinômil da feature linear $X$ para $X^n$, onde $n$ é um valor inteiro. Esse tipo de transformação pode facilitar a classificação tornado uma região de separação não linear, como uma circular, em uma região de separação linear, como uma linha, a figura abaixo mostra um exemplo desse tipo de transformação.

SVM Kernel

Apesar do truque de transformar features lineares em não lineares funcionar, adicionar várias features não lineares aumenta muito o tamanho do dataset. Por isso o modelo de SVM usa o truque do kernel, no qual as transformações das features são feitas de forma indireta, por meio da escolha do kernel a ser utilizado. Com isso, obtemos resultados semelhantes a uma transformação não linear das features, porém sem o onus de adicionarmos novas features ao dataset. Os kerneis mais comumente utilizados são o polinômial e o RBF guassiano (Radial Basis Function).

Ao utilizarmo o kernel polinômial de grau $n$, é como se o modelo estivesse transformando as features $X$ e $Y$ em combinações $X^2$, $Y^2$, $XY$ e etc, antes de fazer o fit. Obviamente, se o modelo apresentar overfit, é só uma questão de reduzir o grau do kernel polinômial utilizado.

O kerenl RFB guassiano é equivalente a transformamos as features usando uma função guassiana que mede similaridade entre os pontos do dataset. A largura da guassiana considerada no kernel é controlado por meio do hiperparâmetro $\gamma$, valores baixos aumentam a largura da guassiana enquanto valores altos diminuem a largura. Se o modelo apresentar overfit é só diminuir o $\gamma$, isso vai relaxar as restrições do uso de uma guassiana muito centrada.

SVM Regression

A ideia é inverter o que o algoritmo de SVM fazia na classificação, invés de tentar separar os pontos, tentamos colocar o máximo de pontos dentro das linhas pontilhas como mostrado na primeira imagem. A distância da linha pontilhada é controlada pelo hiperparâmetro $\epsilon$.

Detectando Outliers

SVM podem ser usados para detectar outliers, porém o algoritmo não tem um desempenho muito bom nesta tarefa. Ele é melhor utilizado para detectar dados novos quando o dataset não possui outliers, como é descrito na documentação do Scikit-Learn.

Resumo

  • O algoritmo de SVM só pode ser utilizado para classificar duas classes, é um classificador binário. Porém, existem formas de se contornar essa limitação.

  • O modelo de SVM não retorna de forma direta as probabilidades para cada classe. Porém, existem formas de se obtê-las.

  • O modelo SVM é sensível a escala das features, sendo necessário colocá-las na mesma escala. Além disso, o modelo SVC (SVM linear) também regulariza o termo de bias (constante), sendo necessário centralizar os valores das features.

  • Não funciona bem se as classes estiverem sobrepostas.

  • Eficaz em casos onde o número de features é maior que o número de amostras.

Referências

Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow - Livro

2.7.1. Overview of outlier detection methods (Scikit-Learn)