Classificação de Vizinhos Mais Próximos

Beginner

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

Introdução

Neste laboratório, utilizaremos o algoritmo de Classificação dos Vizinhos Mais Próximos para classificar pontos de dados em um espaço bidimensional. Usaremos o conjunto de dados Iris, um conjunto de dados comumente utilizado em aprendizado de máquina. Visualizaremos os limites de decisão para cada classe e observaremos o desempenho do algoritmo quando diferentes pesos são utilizados.

Dicas da Máquina Virtual

Após o término da inicialização da máquina virtual, clique no canto superior esquerdo para mudar para a aba Notebook para acessar o Jupyter Notebook para praticar.

Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão e resolveremos o problema rapidamente para você.

Importação de bibliotecas necessárias

Começaremos importando as bibliotecas necessárias, incluindo matplotlib, seaborn, ListedColormap, datasets, neighbors e DecisionBoundaryDisplay do sklearn.

import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.colors import ListedColormap
from sklearn import neighbors, datasets
from sklearn.inspection import DecisionBoundaryDisplay

Carregamento do conjunto de dados Iris

Em seguida, carregaremos o conjunto de dados Iris usando a função load_iris() do módulo datasets do sklearn.

iris = datasets.load_iris()

Preparação dos dados

Utilizaremos apenas as duas primeiras características do conjunto de dados Iris, que são a largura e o comprimento da sépala. Em seguida, dividiremos os dados na matriz de características X e no vetor alvo y.

X = iris.data[:, :2]
y = iris.target

Definição dos mapas de cores

Definiremos os mapas de cores que serão usados para plotar as fronteiras de decisão e os pontos de treinamento.

cmap_light = ListedColormap(["orange", "cyan", "cornflowerblue"])
cmap_bold = ["darkorange", "c", "darkblue"]

Visualizar as fronteiras de decisão

Iremos percorrer dois valores diferentes de peso, "uniforme" e "distância", e plotar as fronteiras de decisão para cada valor de peso. Usaremos a classe KNeighborsClassifier do módulo neighbors para realizar a classificação.

n_neighbors = 15

for weights in ["uniform", "distance"]:
    ## criar uma instância de Neighbours Classifier e ajustar os dados
    clf = neighbors.KNeighborsClassifier(n_neighbors, weights=weights)
    clf.fit(X, y)

    ## plotar as fronteiras de decisão
    _, ax = plt.subplots()
    DecisionBoundaryDisplay.from_estimator(
        clf,
        X,
        cmap=cmap_light,
        ax=ax,
        response_method="predict",
        plot_method="pcolormesh",
        xlabel=iris.feature_names[0],
        ylabel=iris.feature_names[1],
        shading="auto",
    )

    ## plotar os pontos de treinamento
    sns.scatterplot(
        x=X[:, 0],
        y=X[:, 1],
        hue=iris.target_names[y],
        palette=cmap_bold,
        alpha=1.0,
        edgecolor="black",
    )
    plt.title(
        "Classificação de 3 classes (k = %i, pesos = '%s')" % (n_neighbors, weights)
    )

plt.show()

Interpretar os resultados

Podemos observar as fronteiras de decisão para cada valor de peso e como o algoritmo se desempenha na classificação dos pontos de dados. O valor de peso "uniforme" assume que todos os vizinhos têm peso igual, enquanto o valor de peso "distância" atribui mais peso aos vizinhos mais próximos. Podemos ver que as fronteiras de decisão são mais suaves com o valor de peso "distância", indicando uma classificação mais precisa.

Resumo

Neste laboratório, aprendemos a utilizar o algoritmo de Classificação dos Vizinhos Mais Próximos para classificar pontos de dados em um espaço bidimensional. Usamos o conjunto de dados Iris para visualizar as fronteiras de decisão para cada classe e observamos como o algoritmo se comporta quando diferentes valores de peso são utilizados. Também aprendemos a interpretar os resultados e observamos que o valor de peso "distância" apresenta melhor desempenho na classificação dos pontos de dados.