Trilha machine learning: Algoritmo SVM

O SVM (Support Vector Machine) é um algoritmo de aprendizado supervisionado que busca encontrar um hiperplano de separação ótimo entre classes, seu objetivo é maximizar a margem, que é a distância entre o hiperplano e os pontos mais próximos de cada classe (vetores de suporte).

Ele pode ser utilizado tanto para problemas de classificação quanto para problemas de regressão, reconhecimento de objetos, detecção de rosto, classificação de proteínas, identificação de genes, análise de crédito, previsão de mercado...

Por quê escolher o SVM? Bom desempenho em conjuntos de dados com muitas características (alta dimensionalidade), pode ser adaptado para diferentes funções de kernel para lidar com dados não lineares, devido à maximização da margem, é menos suscetível a overfitting em comparação com alguns outros algoritmos. As desvantagens são que a performance do SVM pode depender da escolha adequada dos parâmetros, como o custo (C) e o tipo de kernel, ele pode ser sensível à escala dos dados, portanto, normalização é muitas vezes necessária, e em alguns casos o hiperplano resultante pode ser difícil de interpretar em problemas com muitas dimensões.

O SVM é particularmente eficaz em conjuntos de dados onde há uma clara separação entre as classes; a escolha do kernel e dos parâmetros é crítica para o desempenho do SVM, com certeza ele é uma escolha sólida para muitos tipos de problemas de aprendizado de máquina, mas a compreensão de suas nuances é fundamental para sua aplicação eficaz. O algoritmo SVM (Support Vector Machine) funciona seguindo esses passos:

  1. Escolha do Hiperplano de Separação:
    1. O SVM busca encontrar um hiperplano de separação que maximize a margem entre as classes.
    2. O hiperplano é a superfície de decisão que separa os dados em diferentes classes.

  2. Vetores de Suporte e Margem:
    1. Os vetores de suporte são os pontos mais próximos ao hiperplano e têm uma influência crucial na definição do hiperplano.
    2. A margem é a distância entre o hiperplano e os vetores de suporte. O SVM busca maximizar essa margem.

  3. Transformação para Dimensões Superiores (Quando Necessário):
    1. Quando os dados não são linearmente separáveis, o SVM pode mapear os dados para um espaço de dimensões mais elevadas usando funções de kernel.
    2. Isso permite encontrar hiperplanos de separação em espaços mais complexos.

  4. Classificação ou Regressão:
    1. No caso de classificação, após treinar o modelo, novas amostras podem ser classificadas conforme o lado do hiperplano em que se encontram.
    2. Em problemas de regressão, o SVM busca encontrar um hiperplano que minimize o erro de regressão.

  5. Otimização com Lagrangeanos:
    1. A otimização do SVM é realizada usando multiplicadores de Lagrange para formar a função Lagrangeana.
    2. Os multiplicadores são ajustados para maximizar a margem enquanto garantem que as amostras estejam corretamente classificadas.

  6. Kernel Trick:
    1. O uso de funções de kernel (linear, polinomial, RBF, etc.) permite lidar com dados não linearmente separáveis sem a necessidade de mapear explicitamente para dimensões mais altas.

Em resumo, o SVM é um algoritmo que busca encontrar o melhor hiperplano de separação entre classes, priorizando a maximização da margem e, assim, aumentando a capacidade de generalização do modelo. A flexibilidade do SVM é aprimorada pelo uso de funções de kernel, tornando-o adequado para uma variedade de problemas de aprendizado de máquina.

Vamos ver uma forma simples de aplicar o SVM.

O resultado: 


Vamos entender nosso código e o resultado:

Utilizamos um conjunto de dados de dígitos escritos à mão, disponível no scikit-learn através do módulo `datasets`. O conjunto de dados de dígitos escritos à mão (`digits`) consiste em imagens de 8x8 pixels representando dígitos de 0 a 9, cada imagem é achatada em um vetor de comprimento 64 para ser usado como características. O objetivo é classificar corretamente os dígitos com base nessas características, neste exemplo, o SVM é usado para realizar essa tarefa, e o t-SNE é aplicado para visualização gráfica em duas dimensões.

  • Os dados são divididos em conjuntos de treino e teste (80% treino, 20% teste) usando `train_test_split`.
  • Aplica-se o t-SNE para reduzir a dimensionalidade dos dados para 2 componentes, tornando-os adequados para visualização.
  • Cria-se um classificador SVM linear e treina-o com os dados de treino.
  • O SVM faz previsões no conjunto de teste (X_test) e as compara com as classes reais (y_test).
  • A acurácia do modelo (proporção de previsões corretas) é calculada usando a função accuracy_score do scikit-learn.
  • Utiliza-se um scatter plot para visualizar os dados em duas dimensões (resultantes do t-SNE), onde cada ponto é colorido de acordo com sua classe real.

Conseguimos obter uma acurácia próxima de 1, o que é excelente, e nossos dígitos foram separados e agrupados conforme esperado, apesar de em alguns grupos notarmos a presença de outros dados, podemos inferir que essas imagens talvez tenham dígitos escritos de forma ilegível, que a imagem esteja ruim... qualquer coisa que possa causar a interferência na análise do valor escrito.


Espero que tenha gostado! Até mais 😉











Comentários

Postagens mais visitadas deste blog

Resenha: Storytelling com dados - Cole Nussbaumer Knaflic

Trilha estatística: Variância e desvio padrão

Trilha machine learning: Algoritmo de regressão linear