Scikit Learn - Métodos de agrupamento

Aqui, estudaremos sobre os métodos de agrupamento no Sklearn que ajudarão na identificação de qualquer semelhança nas amostras de dados.

Métodos de agrupamento, um dos métodos de ML não supervisionados mais úteis, usados ​​para encontrar padrões de similaridade e relacionamento entre amostras de dados. Depois disso, eles agrupam essas amostras em grupos com semelhanças com base nos recursos. O agrupamento determina o agrupamento intrínseco entre os dados não rotulados presentes, por isso é importante.

A biblioteca Scikit-learn tem sklearn.clusterpara realizar o agrupamento de dados não rotulados. Sob este módulo, o scikit-leran tem os seguintes métodos de agrupamento -

KMeans

Este algoritmo calcula os centróides e itera até encontrar o centróide ideal. Requer que o número de clusters seja especificado, por isso assume que eles já são conhecidos. A lógica principal desse algoritmo é agrupar os dados separando as amostras em n números de grupos de variâncias iguais, minimizando os critérios conhecidos como inércia. O número de clusters identificados pelo algoritmo é representado por 'K.

Scikit-learn tem sklearn.cluster.KMeansmódulo para realizar agrupamento K-Means. Enquanto computa os centros de cluster e o valor da inércia, o parâmetro denominadosample_weight permite sklearn.cluster.KMeans módulo para atribuir mais peso a algumas amostras.

Propagação de afinidade

Este algoritmo é baseado no conceito de 'passagem de mensagens' entre diferentes pares de amostras até a convergência. Não requer que o número de clusters seja especificado antes de executar o algoritmo. O algoritmo tem uma complexidade de tempo da ordem (2), que é a maior desvantagem dele.

Scikit-learn tem sklearn.cluster.AffinityPropagation módulo para realizar clustering de Propagação de Afinidade.

Desvio Médio

Este algoritmo descobre principalmente blobsem uma densidade uniforme de amostras. Ele atribui os pontos de dados aos clusters iterativamente, mudando os pontos em direção à densidade mais alta de pontos de dados. Em vez de confiar em um parâmetro chamadobandwidth ditando o tamanho da região a ser pesquisada, ele define automaticamente o número de clusters.

Scikit-learn tem sklearn.cluster.MeanShift módulo para realizar agrupamento de deslocamento médio.

Agrupamento Espectral

Antes do clustering, esse algoritmo basicamente usa os autovalores, ou seja, o espectro da matriz de similaridade dos dados para realizar a redução de dimensionalidade em menos dimensões. O uso deste algoritmo não é aconselhável quando houver grande número de clusters.

Scikit-learn tem sklearn.cluster.SpectralClustering módulo para realizar agrupamento espectral.

Agrupamento hierárquico

Esse algoritmo cria clusters aninhados mesclando ou dividindo os clusters sucessivamente. Esta hierarquia de cluster é representada como dendrograma, ou seja, árvore. Ele se enquadra nas duas categorias a seguir -

Agglomerative hierarchical algorithms- Nesse tipo de algoritmo hierárquico, cada ponto de dados é tratado como um único cluster. Em seguida, aglomera sucessivamente os pares de clusters. Isso usa a abordagem de baixo para cima.

Divisive hierarchical algorithms- Neste algoritmo hierárquico, todos os pontos de dados são tratados como um grande cluster. Neste processo, o agrupamento envolve a divisão, usando a abordagem de cima para baixo, o grande cluster em vários pequenos clusters.

Scikit-learn tem sklearn.cluster.AgglomerativeClustering módulo para realizar agrupamento hierárquico aglomerativo.

DBSCAN

Ele significa “Density-based spatial clustering of applications with noise”. Este algoritmo é baseado na noção intuitiva de “clusters” e “ruído” de que os clusters são regiões densas de menor densidade no espaço de dados, separadas por regiões de menor densidade de pontos de dados.

Scikit-learn tem sklearn.cluster.DBSCANmódulo para realizar clustering DBSCAN. Existem dois parâmetros importantes, nomeadamente min_samples e eps, usados ​​por este algoritmo para definir denso.

Maior valor do parâmetro min_samples ou o valor mais baixo do parâmetro eps dará uma indicação sobre a maior densidade de pontos de dados que é necessária para formar um cluster.

ÓPTICA

Ele significa “Ordering points to identify the clustering structure”. Este algoritmo também encontra clusters baseados em densidade em dados espaciais. Sua lógica básica de trabalho é como DBSCAN.

Ele aborda uma das principais fraquezas do algoritmo DBSCAN - o problema de detectar clusters significativos em dados de densidade variável - ordenando os pontos do banco de dados de forma que os pontos espacialmente mais próximos se tornem vizinhos no ordenamento.

Scikit-learn tem sklearn.cluster.OPTICS módulo para realizar agrupamento OPTICS.

BÉTULA

Significa redução iterativa balanceada e agrupamento usando hierarquias. É usado para realizar clustering hierárquico em grandes conjuntos de dados. Ele constrói uma árvore chamadaCFT ie Characteristics Feature Tree, para os dados fornecidos.

A vantagem do CFT é que os nós de dados chamados de nós CF (Characteristics Feature) contêm as informações necessárias para o agrupamento, o que evita ainda mais a necessidade de manter todos os dados de entrada na memória.

Scikit-learn tem sklearn.cluster.Birch módulo para realizar clustering BIRCH.

Comparando Algoritmos de Clustering

A tabela a seguir fornecerá uma comparação (com base em parâmetros, escalabilidade e métrica) dos algoritmos de agrupamento no scikit-learn.

Sr. Não Nome do Algoritmo Parâmetros Escalabilidade Métrica usada
1 K-Means No. de clusters Amostras n muito grandes A distância entre os pontos.
2 Propagação de afinidade Amortecimento Não é escalável com n_samples Distância do Gráfico
3 Mean-Shift Largura de banda Não é escalonável com n_samples. A distância entre os pontos.
4 Agrupamento Espectral No. de clusters Nível médio de escalabilidade com n_samples. Pequeno nível de escalabilidade com n_clusters. Distância do Gráfico
5 Agrupamento hierárquico Limite de distância ou número de clusters Amostras n grandes n_clusters grandes A distância entre os pontos.
6 DBSCAN Tamanho da vizinhança N_samples muito grandes e n_clusters médios. Distância do ponto mais próximo
7 ÓPTICA Associação mínima do cluster N_samples muito grandes e n_clusters grandes. A distância entre os pontos.
8 BÉTULA Limiar, fator de ramificação Amostras n grandes n_clusters grandes A distância euclidiana entre pontos.

Clustering K-Means no conjunto de dados Scikit-learn Digit

Neste exemplo, aplicaremos o agrupamento K-means no conjunto de dados de dígitos. Este algoritmo identificará dígitos semelhantes sem usar as informações do rótulo original. A implementação é feita no notebook Jupyter.

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans
from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape

Resultado

1797, 64)

Esta saída mostra que o conjunto de dados de dígitos está tendo 1797 amostras com 64 recursos.

Exemplo

Agora, execute o agrupamento K-Means da seguinte forma -

kmeans = KMeans(n_clusters = 10, random_state = 0)
clusters = kmeans.fit_predict(digits.data)
kmeans.cluster_centers_.shape

Resultado

(10, 64)

Esta saída mostra que o clustering K-means criou 10 clusters com 64 recursos.

Exemplo

fig, ax = plt.subplots(2, 5, figsize = (8, 3))
centers = kmeans.cluster_centers_.reshape(10, 8, 8)
for axi, center in zip(ax.flat, centers):
axi.set(xticks = [], yticks = [])
axi.imshow(center, interpolation = 'nearest', cmap = plt.cm.binary)

Resultado

A saída abaixo tem imagens que mostram os centros de clusters aprendidos por K-Means Clustering.

Em seguida, o script Python abaixo irá combinar os rótulos de cluster aprendidos (por K-Means) com os rótulos verdadeiros encontrados neles -

from scipy.stats import mode
labels = np.zeros_like(clusters)
for i in range(10):
mask = (clusters == i)
labels[mask] = mode(digits.target[mask])[0]

Também podemos verificar a precisão com a ajuda do comando mencionado abaixo.

from sklearn.metrics import accuracy_score
accuracy_score(digits.target, labels)

Resultado

0.7935447968836951

Exemplo de implementação completo

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np

from sklearn.cluster import KMeans
from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape
kmeans = KMeans(n_clusters = 10, random_state = 0)
clusters = kmeans.fit_predict(digits.data)
kmeans.cluster_centers_.shape
fig, ax = plt.subplots(2, 5, figsize = (8, 3))
centers = kmeans.cluster_centers_.reshape(10, 8, 8)
for axi, center in zip(ax.flat, centers):
   axi.set(xticks=[], yticks = [])
   axi.imshow(center, interpolation = 'nearest', cmap = plt.cm.binary)
from scipy.stats import mode
labels = np.zeros_like(clusters)
for i in range(10):
   mask = (clusters == i)
   labels[mask] = mode(digits.target[mask])[0]
from sklearn.metrics import accuracy_score
accuracy_score(digits.target, labels)