Uma Máquina de Vetor de Suporte (SVM) é um classificador discriminativo formalmente definido por um hiperplano de separação. Em outras palavras, dados de treinamento rotulados (aprendizado supervisionado), o algoritmo gera um hiperplano ideal que categoriza novos exemplos. Isso é feito minimizando a margem entre os pontos de dados próximos ao hiperplano.
Uma função de custo SVM procura aproximar a função logística com um linear por partes. Este algoritmo ML é usado para problemas de classificação e faz parte do subconjunto de algoritmos de aprendizado supervisionado.
A função custo é usada para treinar o SVM. Minimizando o valor de J (theta), podemos garantir que o SVM seja o mais preciso possível. Na equação, as funções custo1 e custo0 referem-se ao custo para um exemplo onde y = 1 e o custo para um exemplo onde y = 0. O custo, para SVMs, é determinado pelas funções do kernel (similaridade).
### Kernels
Recursos polinomiais são possivelmente computacionalmente caros e podem retardar o tempo de execução com grandes conjuntos de dados. Em vez de adicionar mais recursos polinomiais, adicione "pontos de referência" com os quais você testa a proximidade de outros pontos de dados. Cada membro do conjunto de treinamento é um marco. Um kernel é a "função de similaridade" que mede a proximidade de uma entrada a um determinado marcador.
### Classificador de Grandes Margens
Um SVM encontrará a linha (ou hiperplano no caso mais geral) que divide os dados com a maior margem. Enquanto outliers podem influenciar a linha em uma direção, um valor C pequeno o suficiente para garantir a regularização. Essa nova regularização funciona da mesma forma com 1 / lambda, como visto na regressão linear e logística, mas aqui modificamos o componente de custo.
#### Mais Informações:
[Curso de ML de Andrew Ng](https://www.coursera.org/learn/machine-learning/) [Palestra de Vídeo Independente](https://www.youtube.com/watch?v=1NxnPkZM9bc) [SVM na Wikipédia](https://en.wikipedia.org/wiki/Support_vector_machine)
A seguir, o código escrito para treinamento, previsão e precisão do SVM em Python. Isso é feito usando o Numpy, mas também podemos escrever usando o scikit-learn em apenas uma chamada de função.
```Python
import numpy as np
class Svm (object):
"""" Svm classifier """
def __init__ (self, inputDim, outputDim):
self.W = None
# - Generate a random svm weight matrix to compute loss #
# with standard normal distribution and Standard deviation = 0.01. #