Agrupamento Hierárquico em Conjunto de Dados de Dígitos

Beginner

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

Introdução

Este laboratório ilustra várias opções de ligação para o agrupamento aglomerativo numa incorporação 2D do conjunto de dados dos dígitos. O objetivo deste laboratório é mostrar como diferentes estratégias de ligação se comportam e não encontrar bons clusters para os dígitos. É por isso que o exemplo funciona numa incorporação 2D.

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 a aprendizagem, não hesite em contactar o Labby. Forneça feedback após a sessão e resolveremos prontamente o problema para si.

Importar Bibliotecas

Começamos importando as bibliotecas necessárias para este laboratório. Usaremos numpy, matplotlib, manifold e datasets do scikit-learn para realizar o agrupamento aglomerativo.

import numpy as np
from matplotlib import pyplot as plt
from time import time
from sklearn import manifold, datasets
from sklearn.cluster import AgglomerativeClustering

Carregar e Preparar o Conjunto de Dados

Carregamos o conjunto de dados dos dígitos e o preparamos para o agrupamento, extraindo os dados e as etiquetas alvo. Também definimos a semente aleatória para zero, garantindo a reprodutibilidade.

digits = datasets.load_digits()
X, y = digits.data, digits.target
n_samples, n_features = X.shape
np.random.seed(0)

Visualizar o Conjunto de Dados

Visualizamos o conjunto de dados calculando uma representação bidimensional do conjunto de dados dos dígitos usando manifold.SpectralEmbedding() e traçando um gráfico de dispersão com marcadores diferentes para cada dígito.

def plot_dataset(X_red):
    x_min, x_max = np.min(X_red, axis=0), np.max(X_red, axis=0)
    X_red = (X_red - x_min) / (x_max - x_min)

    plt.figure(figsize=(6, 4))
    for digit in digits.target_names:
        plt.scatter(
            *X_red[y == digit].T,
            marker=f"${digit}$",
            s=50,
            alpha=0.5,
        )

    plt.xticks([])
    plt.yticks([])
    plt.title('Gráfico de Dispersão do Conjunto de Dados de Dígitos', size=17)
    plt.axis("off")
    plt.tight_layout(rect=[0, 0.03, 1, 0.95])

print("Calculando a representação")
X_red = manifold.SpectralEmbedding(n_components=2).fit_transform(X)
print("Concluído.")
plot_dataset(X_red)

Agrupamento Hierárquico com Diferentes Estratégias de Ligação

Realizamos agrupamento hierárquico com diferentes estratégias de ligação: ward, média, completa e única. Definimos o número de clusters como 10 para todas as estratégias. Em seguida, representamos os resultados do agrupamento usando cores diferentes para cada dígito.

def plot_clustering(X_red, labels, title=None):
    x_min, x_max = np.min(X_red, axis=0), np.max(X_red, axis=0)
    X_red = (X_red - x_min) / (x_max - x_min)

    plt.figure(figsize=(6, 4))
    for digit in digits.target_names:
        plt.scatter(
            *X_red[y == digit].T,
            marker=f"${digit}$",
            s=50,
            c=plt.cm.nipy_spectral(labels[y == digit] / 10),
            alpha=0.5,
        )

    plt.xticks([])
    plt.yticks([])
    if title is not None:
        plt.title(title, size=17)
    plt.axis("off")
    plt.tight_layout(rect=[0, 0.03, 1, 0.95])

for linkage in ("ward", "average", "complete", "single"):
    clustering = AgglomerativeClustering(linkage=linkage, n_clusters=10)
    t0 = time()
    clustering.fit(X_red)
    print("%s :\t%.2fs" % (linkage, time() - t0))

    plot_clustering(X_red, clustering.labels_, "%s linkage" % linkage)

plt.show()

Resumo

Neste laboratório, aprendemos como realizar agrupamento hierárquico no conjunto de dados de dígitos utilizando diferentes estratégias de ligação. Também visualizamos o conjunto de dados e os resultados de agrupamento para cada estratégia. Os resultados demonstram que diferentes estratégias de ligação produzem resultados de agrupamento distintos, e devemos escolher a estratégia que melhor se adapta às nossas necessidades.