Agrupamento Hierárquico com Restrições de Conectividade

Beginner

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

Introdução

Este laboratório demonstra como realizar agrupamento hierárquico com restrições de conectividade utilizando a biblioteca Scikit-learn em Python. No agrupamento hierárquico, os clusters são formados fundindo ou dividindo-os recursivamente com base na distância entre eles. As restrições de conectividade podem ser usadas para restringir a formação de clusters com base na conectividade entre os pontos de dados, o que pode resultar em clusters mais significativos.

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 praticar.

Às vezes, pode ser necessário esperar 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 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.

Gerar Dados

Começamos gerando o conjunto de dados Swiss Roll usando a função make_swiss_roll da Scikit-learn. O conjunto de dados Swiss Roll é um conjunto de dados 3D com forma de espiral.

from sklearn.datasets import make_swiss_roll

n_samples = 1500
noise = 0.05
X, _ = make_swiss_roll(n_samples, noise=noise)
## Torná-lo mais fino
X[:, 1] *= 0.5

Agrupamento Hierárquico Não Estruturado

Realizamos o AgglomerativeClustering, que se enquadra no Agrupamento Hierárquico sem quaisquer restrições de conectividade.

from sklearn.cluster import AgglomerativeClustering

ward = AgglomerativeClustering(n_clusters=6, linkage="ward").fit(X)
label = ward.labels_

Plotar Clusters Hierárquicos Não Estruturados

Plotamos os clusters hierárquicos não estruturados usando a biblioteca matplotlib.

import matplotlib.pyplot as plt

fig1 = plt.figure()
ax1 = fig1.add_subplot(111, projection="3d", elev=7, azim=-80)
for l in np.unique(label):
    ax1.scatter(
        X[label == l, 0],
        X[label == l, 1],
        X[label == l, 2],
        color=plt.cm.jet(float(l) / np.max(label + 1)),
        s=20,
        edgecolor="k",
    )

Agrupamento Hierárquico Estruturado

Definimos vizinhos mais próximos (k-Nearest Neighbors) com 10 vizinhos usando a função kneighbors_graph do Scikit-learn.

from sklearn.neighbors import kneighbors_graph

connectivity = kneighbors_graph(X, n_neighbors=10, include_self=False)

Realizamos novamente o AgglomerativeClustering com restrições de conectividade.

ward = AgglomerativeClustering(
    n_clusters=6, connectivity=connectivity, linkage="ward"
).fit(X)
label = ward.labels_

Plotar Clusters Hierárquicos Estruturados

Plotamos os clusters hierárquicos estruturados usando a biblioteca matplotlib.

fig2 = plt.figure()
ax2 = fig2.add_subplot(111, projection="3d", elev=7, azim=-80)
for l in np.unique(label):
    ax2.scatter(
        X[label == l, 0],
        X[label == l, 1],
        X[label == l, 2],
        color=plt.cm.jet(float(l) / np.max(label + 1)),
        s=20,
        edgecolor="k",
    )

Resumo

Este laboratório demonstrou como realizar agrupamento hierárquico com restrições de conectividade usando a biblioteca Scikit-learn em Python. Primeiro, geramos o conjunto de dados Swiss Roll e realizamos o agrupamento hierárquico não estruturado. Em seguida, definimos vizinhos mais próximos (k-Nearest Neighbors) com 10 vizinhos e realizamos o agrupamento hierárquico estruturado. Finalmente, plotamos os clusters hierárquicos não estruturados e estruturados usando a biblioteca matplotlib.