Plotar o Hiperplano Separador SGD

Beginner

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

Introdução

Neste laboratório, aprenderemos a utilizar Máquinas de Vetores de Suporte (SVM) com Gradiente Descendente Estocástico (SGD) para classificar dados. SVM é um poderoso algoritmo de classificação amplamente utilizado em aprendizado de máquina para análise de classificação e regressão. A ideia por trás do SVM é encontrar o melhor hiperplano que separa os dados em classes com a maior margem possível. A margem é a distância entre o hiperplano e os pontos de dados mais próximos de cada classe. O Gradiente Descendente Estocástico (SGD) é um algoritmo de otimização utilizado para encontrar os melhores parâmetros para o algoritmo SVM.

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.

Importar bibliotecas necessárias e gerar dados

Primeiro, precisamos importar as bibliotecas necessárias e gerar um conjunto de dados adequado para classificação. Neste exemplo, geraremos 50 pontos separáveis usando a função make_blobs do Scikit-learn.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import SGDClassifier
from sklearn.datasets import make_blobs

## criamos 50 pontos separáveis
X, Y = make_blobs(n_samples=50, centers=2, random_state=0, cluster_std=0.60)

Treinar o modelo SVM com SGD

Em seguida, precisamos treinar o modelo SVM usando SGD. Usaremos a classe SGDClassifier do Scikit-learn para treinar o modelo. Definiremos o parâmetro loss como "hinge" para usar o algoritmo SVM e o parâmetro alpha como 0.01 para controlar a força de regularização. Também definiremos o parâmetro max_iter como 200 para limitar o número de iterações.

## ajustar o modelo
clf = SGDClassifier(loss="hinge", alpha=0.01, max_iter=200)
clf.fit(X, Y)

Plotar o hiperplano separador de margem máxima

Finalmente, podemos plotar o hiperplano separador de margem máxima que obtivemos usando o algoritmo SVM com SGD. Criaremos uma grade de pontos usando np.meshgrid e, em seguida, computaremos a função de decisão para cada ponto na grade usando o método decision_function do modelo SVM. Em seguida, plotaremos a fronteira de decisão usando plt.contour e os pontos de dados usando plt.scatter.

## plotar a linha, os pontos e os vetores mais próximos ao plano
xx = np.linspace(-1, 5, 10)
yy = np.linspace(-1, 5, 10)

X1, X2 = np.meshgrid(xx, yy)
Z = np.empty(X1.shape)
for (i, j), val in np.ndenumerate(X1):
    x1 = val
    x2 = X2[i, j]
    p = clf.decision_function([[x1, x2]])
    Z[i, j] = p[0]
levels = [-1.0, 0.0, 1.0]
linestyles = ["dashed", "solid", "dashed"]
colors = "k"
plt.contour(X1, X2, Z, levels, colors=colors, linestyles=linestyles)
plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.Paired, edgecolor="black", s=20)

plt.axis("tight")
plt.show()

Resumo

Neste laboratório, aprendemos a utilizar Máquinas de Vetores de Suporte (SVM) com Gradiente Descendente Estocástico (SGD) para classificar dados. Geramos um conjunto de dados adequado para classificação, treinamos o modelo SVM usando SGD e plotamos o hiperplano separador de margem máxima. SVM é um poderoso algoritmo de classificação amplamente utilizado em aprendizado de máquina para análise de classificação e regressão. A ideia por trás do SVM é encontrar o melhor hiperplano que separa os dados em classes com a maior margem possível. O Gradiente Descendente Estocástico (SGD) é um algoritmo de otimização usado para encontrar os melhores parâmetros para o algoritmo SVM.