Classificação SVM com Kernel Personalizado

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) para classificar uma amostra utilizando um kernel personalizado. Usaremos a biblioteca scikit-learn do Python para realizar a classificação SVM com um kernel personalizado. SVM é um algoritmo de aprendizagem de máquina popular utilizado para classificação, regressão e deteção de valores discrepantes. O SVM funciona criando um limite ou uma linha (hiperplano) que separa os dados em 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 o problema rapidamente para si.

Importar Bibliotecas

Neste passo, importamos as bibliotecas necessárias para este laboratório. Usaremos numpy, matplotlib, scikit-learn e DecisionBoundaryDisplay.

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets
from sklearn.inspection import DecisionBoundaryDisplay

Carregar Dados

Neste passo, carregaremos o conjunto de dados iris utilizando o módulo datasets do scikit-learn. Selecionaremos as duas primeiras características do conjunto de dados e atribuiremos-nas à variável X. Também atribuiremos a variável alvo a Y.

iris = datasets.load_iris()
X = iris.data[:, :2]
Y = iris.target

Criar Kernel Personalizado

Neste passo, criaremos um kernel personalizado. O kernel personalizado será um produto escalar de duas matrizes. Criaremos uma matriz M com os valores [[2, 0], [0, 1.0]]. Em seguida, multiplicaremos as matrizes X e Y por M e calculamos o seu produto escalar.

def my_kernel(X, Y):
    """
    Criamos um kernel personalizado:

                 (2  0)
    k(X, Y) = X  (    ) Y.T
                 (0  1)
    """
    M = np.array([[2, 0], [0, 1.0]])
    return np.dot(np.dot(X, M), Y.T)

Criar Classificador SVM

Neste passo, criaremos uma instância do classificador SVM e ajustaremos nossos dados. Usaremos o kernel personalizado criado no passo anterior.

clf = svm.SVC(kernel=my_kernel)
clf.fit(X, Y)

Plotar Fronteira de Decisão

Neste passo, plotaremos a superfície de decisão e os vetores de suporte. Usaremos o módulo DecisionBoundaryDisplay do módulo de inspeção do scikit-learn para plotar a fronteira de decisão. Também plotaremos os pontos de treinamento usando um gráfico de dispersão.

ax = plt.gca()
DecisionBoundaryDisplay.from_estimator(
    clf,
    X,
    cmap=plt.cm.Paired,
    ax=ax,
    response_method="predict",
    plot_method="pcolormesh",
    shading="auto",
)

plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.Paired, edgecolors="k")
plt.title("Classificação de 3 classes usando Máquina de Vetores de Suporte com kernel personalizado")
plt.axis("tight")
plt.show()

Resumo

Neste laboratório, aprendemos como utilizar Máquinas de Vetores de Suporte (SVM) para classificar uma amostra utilizando um kernel personalizado. Usamos a biblioteca scikit-learn para realizar a classificação SVM com um kernel personalizado. Carregamos o conjunto de dados iris, criamos um kernel personalizado, criamos uma instância do classificador SVM e ajustamos nossos dados, e plotamos a fronteira de decisão e os vetores de suporte. SVM é um algoritmo de aprendizado de máquina popular utilizado para classificação, regressão e detecção de outliers.