SVM: Hiperplano de Separação de Margem Máxima

Beginner

This tutorial is from open-source community. Access the source code

Introdução

Neste laboratório, utilizaremos o scikit-learn para criar um conjunto de dados separável de duas classes e traçar o hiperplano de separação de margem máxima utilizando um classificador de Máquinas de Vetores de Suporte (SVM) com um kernel linear. O SVM é um poderoso algoritmo de classificação que encontra a melhor fronteira ou hiperplano que separa os dados em diferentes classes, maximizando a margem entre as classes.

Dicas da Máquina Virtual

Após o arranque da máquina virtual, clique no canto superior esquerdo para mudar para a aba Notebook para aceder ao Jupyter Notebook para a prática.

Por vezes, pode ser necessário esperar alguns segundos para o Jupyter Notebook terminar de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se tiver problemas durante o aprendizado, não hesite em contactar o Labby. Forneça feedback após a sessão e resolveremos prontamente o problema para si.

Criar um Conjunto de Dados Separável de Duas Classes

Para criar um conjunto de dados separável de duas classes, utilizaremos a função make_blobs() do scikit-learn. Esta função gera blobs gaussianos isotrópicos para agrupamento e classificação. Criaremos 40 amostras com dois centros e uma semente aleatória de 6. Também plotaremos os pontos de dados utilizando matplotlib.

import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs

## criar um conjunto de dados separável de duas classes
X, y = make_blobs(n_samples=40, centers=2, random_state=6)

## plotar os pontos de dados
plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)
plt.show()

Ajustar o Modelo SVM

Em seguida, ajustaremos o modelo SVM aos nossos dados utilizando um kernel linear e um parâmetro de regularização de 1000. Usaremos a função svm.SVC() do scikit-learn para criar o classificador SVM.

from sklearn import svm

## ajustar o modelo SVM
clf = svm.SVC(kernel="linear", C=1000)
clf.fit(X, y)

Plotar o Hiperplano de Separação de Margem Máxima

Para plotar o hiperplano de separação de margem máxima, utilizaremos a função DecisionBoundaryDisplay.from_estimator() do scikit-learn. Esta função plota a função de decisão e os vetores de suporte do classificador SVM. Também plotaremos os vetores de suporte como círculos sem preenchimento e com borda preta.

from sklearn.inspection import DecisionBoundaryDisplay

## plotar a função de decisão e os vetores de suporte
ax = plt.gca()
DecisionBoundaryDisplay.from_estimator(
    clf,
    X,
    plot_method="contour",
    colors="k",
    levels=[-1, 0, 1],
    alpha=0.5,
    linestyles=["--", "-", "--"],
    ax=ax,
)
ax.scatter(
    clf.support_vectors_[:, 0],
    clf.support_vectors_[:, 1],
    s=100,
    linewidth=1,
    facecolors="none",
    edgecolors="k",
)
plt.show()

Resumo

Neste laboratório, aprendemos a criar um conjunto de dados separável de duas classes, ajustar um modelo SVM usando um kernel linear e plotar o hiperplano de separação de margem máxima usando o scikit-learn. O SVM é um poderoso algoritmo de classificação que pode ser usado para uma variedade de aplicações, incluindo classificação de imagens, classificação de texto e bioinformática.