logo

Clustering hierárquico em aprendizado de máquina

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:

    Aglomerativo:Aglomerativo é um baixo para cima abordagem, na qual o algoritmo começa tomando todos os pontos de dados como clusters únicos e mesclando-os até que reste um cluster.Divisivo:O algoritmo divisivo é o inverso do algoritmo aglomerativo, pois é um abordagem de cima para baixo.

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:

    Passo 1:Crie cada ponto de dados como um único cluster. Digamos que existam N pontos de dados, então o número de clusters também será N.
    Clustering hierárquico em aprendizado de máquina Passo 2:Pegue dois pontos de dados ou clusters mais próximos e mescle-os para formar um cluster. Portanto, agora haverá clusters N-1.
    Clustering hierárquico em aprendizado de máquina Etapa 3: Novamente, pegue os dois clusters mais próximos e mescle-os para formar um cluster. Haverá clusters N-2.
    Clustering hierárquico em aprendizado de máquina Passo 4:Repita a Etapa 3 até restar apenas um cluster. Portanto, obteremos os seguintes clusters. Considere as imagens abaixo:
    Clustering hierárquico em aprendizado de máquina
    Clustering hierárquico em aprendizado de máquina
    Clustering hierárquico em aprendizado de máquina Etapa 5:Depois que todos os clusters estiverem combinados em um grande cluster, desenvolva o dendograma para dividir os clusters de acordo com o problema.

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:

    Ligação única:É a distância mais curta entre os pontos mais próximos dos clusters. Considere a imagem abaixo:
    Clustering hierárquico em aprendizado de máquina Ligação completa:É a maior distância entre os dois pontos de dois clusters diferentes. É um dos métodos de ligação populares, pois forma clusters mais compactos do que a ligação única.
    Clustering hierárquico em aprendizado de máquina Ligação média:É o método de ligação no qual a distância entre cada par de conjuntos de dados é somada e depois dividida pelo número total de conjuntos de dados para calcular a distância média entre dois clusters. É também um dos métodos de ligação mais populares.Ligação Centróide:É o método de ligação no qual é calculada a distância entre o centróide dos clusters. Considere a imagem abaixo:
    Clustering hierárquico em aprendizado de máquina

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:

Clustering hierárquico em aprendizado de máquina

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:

    Pré-processamento de dados Encontrando o número ideal de clusters usando o dendograma Treinando o modelo de cluster hierárquico Visualizando os clusters

Etapas de pré-processamento de dados:

Nesta etapa, importaremos as bibliotecas e conjuntos de dados para o nosso modelo.

stdin em c
    Importando as bibliotecas
 # 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.

    Importando 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:

Clustering hierárquico em aprendizado de máquina
    Extraindo a matriz de recursos

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 :

Clustering hierárquico em aprendizado de máquina

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:

Clustering hierárquico em aprendizado de máquina

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:

    n_clusters=5: define o número de clusters, e tomamos aqui 5 porque é o número ideal de clusters.afinidade='euclidiana': é uma métrica usada para calcular a ligação.ligação='ala': Define os critérios de ligação, aqui usamos a ligação 'ala'. Este método é o método de ligação popular que já usamos para criar o dendograma. Reduz a variação em cada cluster.

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:

Clustering hierárquico em aprendizado de máquina

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:

Clustering hierárquico em aprendizado de máquina