Algoritmo de Agrupamento Mean-Shift

Beginner

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

Introdução

Este laboratório guiará você pelo processo de implementação do Algoritmo de Clustering Mean-Shift usando a biblioteca Scikit-learn em Python. Você aprenderá a gerar dados de amostra, calcular o agrupamento com MeanShift e plotar os resultados.

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 prontamente o problema para você.

Importação de Bibliotecas Necessárias

Primeiro, precisamos importar as bibliotecas necessárias: numpy, sklearn.cluster, sklearn.datasets e matplotlib.pyplot.

import numpy as np
from sklearn.cluster import MeanShift, estimate_bandwidth
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

Geração de Dados de Amostra

Em seguida, geraremos dados de amostra usando a função make_blobs do módulo sklearn.datasets. Criaremos um conjunto de dados com 10.000 amostras e três clusters com centros em [[1, 1], [-1, -1], [1, -1]] e um desvio padrão de 0,6.

centers = [[1, 1], [-1, -1], [1, -1]]
X, _ = make_blobs(n_samples=10000, centers=centers, cluster_std=0.6)

Cálculo de Agrupamento com MeanShift

Agora, calcularemos o agrupamento usando o algoritmo Mean-Shift com a classe MeanShift do módulo sklearn.cluster. Usaremos a função estimate_bandwidth para detectar automaticamente o parâmetro de largura de banda, que representa o tamanho da região de influência para cada ponto.

bandwidth = estimate_bandwidth(X, quantile=0.2, n_samples=500)
ms = MeanShift(bandwidth=bandwidth, bin_seeding=True)
ms.fit(X)
labels = ms.labels_
cluster_centers = ms.cluster_centers_

Plotar Resultados

Finalmente, plotaremos os resultados usando a biblioteca matplotlib.pyplot. Usaremos cores e marcadores diferentes para cada cluster, e também plotaremos os centros dos clusters.

plt.figure(1)
plt.clf()

colors = ["#dede00", "#377eb8", "#f781bf"]
markers = ["x", "o", "^"]

for k, col in zip(range(n_clusters_), colors):
    my_members = labels == k
    cluster_center = cluster_centers[k]
    plt.plot(X[my_members, 0], X[my_members, 1], markers[k], color=col)
    plt.plot(
        cluster_center[0],
        cluster_center[1],
        markers[k],
        markerfacecolor=col,
        markeredgecolor="k",
        markersize=14,
    )
plt.title("Número estimado de clusters: %d" % n_clusters_)
plt.show()

Resumo

Neste laboratório, aprendemos como implementar o Algoritmo de Agrupamento Mean-Shift usando a biblioteca Scikit-learn em Python. Geramos dados de amostra, calculamos o agrupamento com MeanShift e plotamos os resultados. Ao final deste laboratório, você deve ter uma compreensão melhor de como usar o algoritmo Mean-Shift para agrupar dados.