Agrupamento hierárquico e clustering em machine learning
Agrupamento hierárquico é um algoritmo bastante intuitivo, projetado para realizar clustering.
Em machine learning, clustering (agrupamento) é um conjunto de técnicas que pertencem ao aprendizado não supervisionado. Diferentemente do aprendizado supervisionado, no aprendizado não supervisionado não somos guiados por ideias iniciais sobre quais características ou amostras pertencem a quais clusters. Portanto, podemos entender as técnicas de clustering em machine learning como algoritmos que aprendem a agrupar ou a reconhecer padrões sem serem guiados por classes conhecidas previamente.
O que é Agrupamento Hierárquico?
Agrupamento hierárquico é um tipo de algoritmo de aprendizado não supervisionado que agrupa pontos de dados em clusters (grupos) com base em suas semelhanças. Esse processo pode envolver a fusão ou a divisão dos agrupamentos existentes para criar novos agrupamentos. Basicamente, existem dois tipos diferentes de algoritmos de agrupamento hierárquico: algoritmo aglomerativo e algoritmo de particionamento ou divisivo.
Na abordagem de agrupamento aglomerativo, começamos com cada ponto de dado como um cluster individual. Em seguida, os dois itens mais semelhantes são agrupados. O algoritmo repete essa operação recursivamente. Gradativamente, os pontos de dados são agrupados com base na menor distância entre diferentes entidades até a condição de término ser atingida.
Em algoritmos de particionamento, todos os pontos de dados são iniciados como pertencentes a um único cluster. Este cluster é então dividido recursivamente em vários grupos menores, até que cada cluster contenha somente itens idênticos.
Para ambos os tipos de algoritmos, os resultados geralmente formam o que é conhecido como dendrograma. Dendrogramas são essencialmente diagramas em forma de árvore que evidenciam quão próximos diferentes grupos estão entre si. Essa proximidade é estimada pela distância entre os clusters em cada nível da estrutura hierárquica.
Exemplo de dendrograma (fonte).
O algoritmo aglomerativo
Para entender melhor como o agrupamento hierárquico funciona na prática, essas são as etapas gerais do algoritmo aglomerativo:
Escolha uma função de distância para os pontos de dados d(xi,xj).
Escolha uma função de distância para os clusters D(Ci,Cj).
Comece a partir de N clusters, cada um contendo um ponto de dado.
A cada iteração:
Utilize a matriz atual das distâncias dos clusters para encontrar os dois mais próximos.
Atualize a lista de clusters combinando os dois mais próximos.
Atualize a matriz das distâncias do cluster.
Repita esses passos até que todos os itens estejam unidos em um único agrupamento.
Para medir a distância entre pontos de dados, existem várias opções. Uma medida popular de distância é a distância euclidiana. Já para medir a distância entre clusters, utiliza-se uma função de ligação. Novamente, existem muitas opções. Uma delas é a Ligação Única. Ela combina clusters com base na semelhança entre seus pontos mais próximos. Outro método é a Ligação Completa que agrupa clusters com base na distância máxima entre os pontos mais distantes.
agrupamento hierárquico com Python
Em Python, uma forma fácil para implementar o agrupamento hierárquico consiste em utilizarmos a popular biblioteca scikit-learn. Veja abaixo um exemplo de código de agrupamento aglomerativo com o conjunto de dados iris:
from sklearn.datasets import load_iris
from sklearn.cluster import AgglomerativeClustering
# Carrega conjunto de dados iris
iris = load_iris()
X = iris.data
# Realiza agrupamento aglomerativo
cluster = AgglomerativeClustering(n_clusters=3, metric='euclidean', linkage='ward')
labels = cluster.fit_predict(X)
O código é muito simples. Primeiro, importamos a classe e o conjunto de dados que usaremos. Depois, carregamos os dados e realizamos o treinamento com a classe AgglomerativeClustering.
A classe AgglomerativeClustering em scikit-learn possui vários parâmetros que podem ser usados para controlar o comportamento do agrupamento hierárquico, incluindo:
n_clusters: define o número de clusters a serem encontrados. O valor padrão é 2.
metric: determina como a distância entre clusters é calculada. As opções incluem ‘euclidean’, ‘l1’, ‘l2’, ‘manhattan’, ‘cosine’, e ‘precomputed’.
linkage: a função de ligação usada para fundir clusters. As opções são ‘ward’ (minimiza a variância), ‘complete’ (máximo entre pontos), ‘average’ (média entre todos os pontos) e ‘single’ (mínimo de todas as distâncias).
Visualização com dendrograma
Após acharmos os agrupamentos de nosso conjunto de dados com agrupamento hierárquico, obviamente queremos visualizá-los com um dendograma. Para isso, usaremos a biblioteca Scipy e Matplotlib. Veja o trecho abaixo:
import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import dendrogram, linkage
# Para criar um dendrograma, é necessário calcular a matriz de ligação
linked = linkage(X, method='ward')
plt.figure(figsize=(10, 7))
dendrogram(linked,
orientation='top',
distance_sort='ascending',
show_leaf_counts=True)
plt.title('Dendrograma de Clustering Hierárquico (Conjunto de Dados Iris)')
plt.xlabel('Índices')
plt.ylabel('Distância')
plt.show()
Note que, para criar o dendrograma, precisamos obter a matriz de ligação dos clusters. Ela precisa ser calculada separadamente porque o sklearn não a fornece. O dendrograma é mostrado abaixo.
Aplicações do Agrupamento Hierárquico
O agrupamento hierárquico tem inúmeras aplicações em diversos campos:
Bioinformática: ele é usado para construir árvores filogenéticas que representem relações evolutivas entre espécies ou genes. A biblioteca DendroPy oferece vários métodos para essa finalidade.
Segmentação de Imagens: o agrupamento hierárquico ajuda a agrupar pixels em regiões de intensidade ou textura semelhantes, o que é útil ao analisarmos imagens como varreduras médicas ou dados de satélite.
Segmentação de Mercado: identifique grupos de clientes com base em seus comportamentos de compra, demografia ou preferências.
Análise de Redes Sociais: o algoritmo pode ser usado para identificar conexões de redes sociais com dendrogramas para visualizar as relações hierárquicas entre diferentes nós ou indivíduos.
Finanças: o agrupamento hierárquico pode ser aplicado em vários tipos de análises, como gestão de portfólio e avaliação de risco de crédito.
Conclusão
O agrupamento hierárquico é uma técnica poderosa e bastante intuitiva de aprendizado não supervisionado. Ele pode ser empregado para descobrir padrões ocultos em conjuntos de dados de inúmeros campos. Com esse algoritmo, você pode obter insights valiosos sobre dados complexos, identificar novos relacionamentos e tomar decisões mais informadas.