O clustering hierárquico é outro algoritmo de aprendizado de máquina não supervisionado, usado para agrupar os conjuntos de dados não rotulados em um cluster e também conhecido como análise hierárquica de cluster ou AHC.
matriz em string
Neste algoritmo, desenvolvemos a hierarquia de clusters na forma de uma árvore, e essa estrutura em forma de árvore é conhecida como dendograma .
Às vezes, os resultados do agrupamento K-means e do agrupamento hierárquico podem parecer semelhantes, mas ambos diferem dependendo de como funcionam. Como não há necessidade de predeterminar o número de clusters como fizemos no algoritmo K-Means.
A técnica de agrupamento hierárquico tem duas abordagens:
Por que cluster hierárquico?
Como já temos outros agrupamento algoritmos como Agrupamento K-Means , então por que precisamos de cluster hierárquico? Então, como vimos no agrupamento K-means, existem alguns desafios com esse algoritmo, que são um número pré-determinado de clusters, e ele sempre tenta criar clusters do mesmo tamanho. Para resolver estes dois desafios, podemos optar pelo algoritmo de agrupamento hierárquico porque, neste algoritmo, não precisamos ter conhecimento sobre o número predefinido de clusters.
Neste tópico, discutiremos o algoritmo de agrupamento hierárquico aglomerativo.
Clustering hierárquico aglomerativo
O algoritmo de agrupamento hierárquico aglomerativo é um exemplo popular de HCA. Para agrupar os conjuntos de dados em clusters, segue o seguinte abordagem de baixo para cima . Isso significa que este algoritmo considera cada conjunto de dados como um único cluster no início e então começa a combinar o par de clusters mais próximo. Isso é feito até que todos os clusters sejam mesclados em um único cluster que contenha todos os conjuntos de dados.
Esta hierarquia de clusters é representada na forma de dendograma.
Como funciona o clustering hierárquico aglomerativo?
O funcionamento do algoritmo AHC pode ser explicado usando as etapas abaixo:
Nota: Para entender melhor o clustering hierárquico, é aconselhável dar uma olhada no cluster k-means
Meça a distância entre dois clusters
Como vimos, o distância mais próxima entre os dois clusters é crucial para o cluster hierárquico. Existem várias maneiras de calcular a distância entre dois clusters, e essas formas decidem a regra para o agrupamento. Essas medidas são chamadas Métodos de ligação . Alguns dos métodos de ligação populares são fornecidos abaixo:
A partir das abordagens fornecidas acima, podemos aplicar qualquer uma delas de acordo com o tipo de problema ou necessidade de negócio.
Woking do Dendrograma em agrupamento hierárquico
O dendograma é uma estrutura semelhante a uma árvore usada principalmente para armazenar cada etapa como uma memória executada pelo algoritmo HC. No gráfico do dendograma, o eixo Y mostra as distâncias euclidianas entre os pontos de dados e o eixo x mostra todos os pontos de dados de um determinado conjunto de dados.
O funcionamento do dendograma pode ser explicado usando o diagrama abaixo:
No diagrama acima, a parte esquerda mostra como os clusters são criados no agrupamento aglomerativo, e a parte direita mostra o dendograma correspondente.
- Como discutimos acima, em primeiro lugar, os pontos de dados P2 e P3 se combinam e formam um cluster, correspondentemente é criado um dendrograma, que conecta P2 e P3 com uma forma retangular. A altura é decidida de acordo com a distância euclidiana entre os pontos de dados.
- Na próxima etapa, P5 e P6 formam um cluster e o dendograma correspondente é criado. É maior que o anterior, pois a distância euclidiana entre P5 e P6 é um pouco maior que P2 e P3.
- Novamente, são criados dois novos dendogramas que combinam P1, P2 e P3 em um dendograma, e P4, P5 e P6, em outro dendograma.
- Por fim, é criado o dendograma final que combina todos os pontos de dados.
Podemos cortar a estrutura da árvore do dendograma em qualquer nível, conforme nossa necessidade.
Implementação Python de cluster hierárquico aglomerativo
Agora veremos a implementação prática do algoritmo de agrupamento hierárquico aglomerativo usando Python. Para implementar isso, usaremos o mesmo problema de conjunto de dados que usamos no tópico anterior de agrupamento K-means para que possamos comparar facilmente os dois conceitos.
O conjunto de dados contém informações de clientes que visitaram um shopping para fazer compras. Assim, o dono do shopping deseja encontrar alguns padrões ou algum comportamento específico de seus clientes usando as informações do conjunto de dados.
Etapas para implementação de AHC usando Python:
As etapas de implementação serão as mesmas do agrupamento k-means, exceto por algumas alterações, como o método para encontrar o número de clusters. Abaixo estão as etapas:
Etapas de pré-processamento de dados:
Nesta etapa, importaremos as bibliotecas e conjuntos de dados para o nosso modelo.
stdin em c
# Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
As linhas de código acima são usadas para importar as bibliotecas para executar tarefas específicas, como entorpecido para as operações matemáticas, matplotlib para desenhar os gráficos ou gráfico de dispersão, e pandas para importar o conjunto de dados.
# Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv')
Conforme discutido acima, importamos o mesmo conjunto de dados de Mall_Customers_data.csv, como fizemos no agrupamento k-means. Considere a saída abaixo:
Aqui extrairemos apenas a matriz de características, pois não temos mais informações sobre a variável dependente. O código é fornecido abaixo:
x = dataset.iloc[:, [3, 4]].values
Aqui extraímos apenas 3 e 4 colunas, pois usaremos um gráfico 2D para ver os clusters. Portanto, estamos considerando a pontuação anual de receitas e despesas como a matriz de recursos.
Etapa 2: Encontrar o número ideal de clusters usando o dendograma
Agora encontraremos o número ideal de clusters usando o dendograma para nosso modelo. Para isso, vamos usar picante biblioteca, pois fornece uma função que retornará diretamente o dendograma do nosso código. Considere as linhas de código abaixo:
#Finding the optimal number of clusters using the dendrogram import scipy.cluster.hierarchy as shc dendro = shc.dendrogram(shc.linkage(x, method='ward')) mtp.title('Dendrogrma Plot') mtp.ylabel('Euclidean Distances') mtp.xlabel('Customers') mtp.show()
Nas linhas de código acima, importamos o hierarquia módulo da biblioteca scipy. Este módulo nos fornece um método shc.denrograma(), que leva o ligação() como parâmetro. A função de ligação é usada para definir a distância entre dois clusters, então aqui passamos o x (matriz de recursos) e o método ' ala ,' o método popular de ligação em cluster hierárquico.
As linhas restantes de código descrevem os rótulos do gráfico do dendograma.
Saída:
Ao executar as linhas de código acima, obteremos a saída abaixo :
Usando este dendograma, determinaremos agora o número ideal de clusters para nosso modelo. Para isso, encontraremos o distância vertical máxima que não corta nenhuma barra horizontal. Considere o diagrama abaixo:
No diagrama acima, mostramos as distâncias verticais que não cortam suas barras horizontais. Como podemos visualizar, os 4ºa distância é máxima, então de acordo com isso, o número de clusters será 5 (as linhas verticais neste intervalo). Também podemos pegar o 2enúmero, pois é aproximadamente igual a 4ºdistância, mas consideraremos os 5 clusters porque os mesmos calculamos no algoritmo K-means.
Portanto, o número ideal de clusters será 5 , e treinaremos o modelo na próxima etapa, usando o mesmo.
Etapa 3: treinar o modelo de cluster hierárquico
Como sabemos o número ideal necessário de clusters, agora podemos treinar nosso modelo. O código é fornecido abaixo:
converter int em java duplo
#training the hierarchical model on dataset from sklearn.cluster import AgglomerativeClustering hc= AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward') y_pred= hc.fit_predict(x)
No código acima, importamos o AgglomerativoClustering classe do módulo cluster da biblioteca scikit learn.
Então criamos o objeto desta classe denominado como hc. A classe AgglomerativeClustering usa os seguintes parâmetros:
Na última linha, criamos a variável dependente y_pred para ajustar ou treinar o modelo. Ele treina não apenas o modelo, mas também retorna os clusters aos quais cada ponto de dados pertence.
Depois de executar as linhas de código acima, se passarmos pela opção do explorador de variáveis em nosso IDE Sypder, podemos verificar a variável y_pred. Podemos comparar o conjunto de dados original com a variável y_pred. Considere a imagem abaixo:
Como podemos ver na imagem acima, o y_pred mostra o valor dos clusters, o que significa que o ID do cliente 1 pertence ao 5ºcluster (como a indexação começa em 0, então 4 significa 5ºcluster), o ID do cliente 2 pertence a 4ºaglomerado e assim por diante.
Etapa 4: Visualizando os clusters
Como treinamos nosso modelo com sucesso, agora podemos visualizar os clusters correspondentes ao conjunto de dados.
Aqui usaremos as mesmas linhas de código que usamos no cluster k-means, exceto uma alteração. Aqui não representaremos o centróide que fizemos em k-means, porque aqui usamos o dendograma para determinar o número ideal de clusters. O código é fornecido abaixo:
#visulaizing the clusters mtp.scatter(x[y_pred == 0, 0], x[y_pred == 0, 1], s = 100, c = 'blue', label = 'Cluster 1') mtp.scatter(x[y_pred == 1, 0], x[y_pred == 1, 1], s = 100, c = 'green', label = 'Cluster 2') mtp.scatter(x[y_pred== 2, 0], x[y_pred == 2, 1], s = 100, c = 'red', label = 'Cluster 3') mtp.scatter(x[y_pred == 3, 0], x[y_pred == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4') mtp.scatter(x[y_pred == 4, 0], x[y_pred == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5') mtp.title('Clusters of customers') mtp.xlabel('Annual Income (k$)') mtp.ylabel('Spending Score (1-100)') mtp.legend() mtp.show()
Saída: Ao executar as linhas de código acima, obteremos a saída abaixo: