DENDOGRAMAS: SÉRIE DE GRÁFICOS
Olá, Letícia da Minha Estatística aqui :). Click here to go to the post in English.
À medida que continuamos nossa Série de Grafos, esta semana exploramos o vasto mundo dos Dendrogramas, uma poderosa ferramenta de visualização para ilustrar relações hierárquicas entre objetos. Os dendrogramas são comumente utilizados em agrupamento hierárquico, um método de aprendizado de máquina não supervisionado, assim como em algoritmos supervisionados, como árvores de decisão. Eles também são amplamente aplicados fora do aprendizado de máquina, como na criação de Mapas de Calor e visualizações independentes de dendrogramas.
Hoje, vou estabelecer a base para o entendimento dos dendrogramas, fornecendo informações essenciais que prepararão você para explorar métodos de aprendizado de máquina. Esse conhecimento fundamental permitirá que você avance para aplicações mais avançadas. Todos os scripts estão disponíveis no meu GitHub, para que você possa replicá-los facilmente e executá-los por conta própria, fazendo os ajustes que desejar!
Com os dendrogramas, compreender como os dados ou objetos são agrupados é fundamental. Esse agrupamento é realizado por meio de métodos de agrupamento hierárquico aglomerativo, que são técnicas de aprendizado de máquina não supervisionadas. Inicialmente, cada ponto de dado é tratado como seu próprio grupo individual. O processo de agrupamento começa unindo os dois clusters mais próximos (os vetores de dados com a menor distância entre si). Esse processo iterativo continua até que reste apenas um único cluster. Existem vários métodos para determinar como os clusters são mesclados, e os mais utilizados (dentre um total de 11 métodos) incluem:
- Método de ligação simples (vizinho mais próximo):
- Método de ligação completa (vizinho mais distante):
- Método de agrupamento por média:
- Método de agrupamento por centróide:
- Método de agrupamento por mediana:
- Método de Ward ou Método do Aumento da Soma dos Quadrados:
- Método de agrupamento por média ponderada (WPGMA):
- Ramos: Representam as relações entre os clusters. Quanto mais longos os ramos, maior a dissimilaridade entre os clusters que estão sendo unidos.
- Folhas: Localizadas na parte inferior do dendrograma, as folhas correspondem aos pontos de dados ou objetos individuais. No início do processo de agrupamento, cada ponto de dado é considerado um cluster independente, representado como uma folha no diagrama.
- Nós: Os nós são os pontos onde dois ramos se encontram, indicando a fusão de dois clusters. À medida que o agrupamento avança, os nós se aproximam, indicando a formação de clusters mais semelhantes ou mais relacionados.
- Altura: A altura dos nós e ramos reflete a distância ou dissimilaridade entre os clusters. Um nó mais alto indica uma maior distância entre os clusters mesclados, enquanto um nó mais baixo sugere que os clusters unidos são mais semelhantes.
- R Graph Gallery
- Pyhton Graph Gallery
- Global Journal of HUMAN-SOCIAL SCIENCE: G Linguistics \< Education, V.16 I.3 V.1.0, 2016. Double Blind Peer Reviewed International Research Journal. Global Journals Inc. (USA).
Nesse método, a distância entre dois clusters é determinada pelo par de pontos de dados (vetores) mais próximos. A cada etapa do processo de agrupamento, os dois clusters com a menor distância entre seus pontos mais próximos são unidos.
\[ D(A,B) = \min_{a \in A, b \in B} d(a,b) \]No método de Ligação Completa, a distância entre dois clusters é definida pela maior distância entre qualquer ponto de um cluster e qualquer ponto do outro cluster. Essa abordagem tende a formar grupos mais compactos, pois busca minimizar as maiores distâncias entre os clusters durante o processo de fusão.
\[ D(A,B) = \max_{a \in A, b \in B} d(a,b) \]No método de Ligação Média, a distância entre dois clusters é determinada pela média das distâncias entre todos os pares de pontos. A cada etapa do processo de agrupamento, os dois clusters com a menor distância média são unidos. Esse método busca equilibrar a distância entre os clusters, considerando todos os pares de pontos, em vez de apenas os mais próximos ou mais distantes.
\[ D_{\text{avg}}(A,B) = \frac{\sum_{i=1}^{m} \sum_{j=1}^{n} d(a_i \in A, b_j \in B)}{m \times n} \]No método de agrupamento por Centróide, também conhecido como Método de Grupo Não Ponderado com Centróide (UPGMC), a distância entre dois clusters é calculada determinando a distância ao quadrado entre seus centróides (pontos médios). Esse método é idealmente aplicado quando se trabalha com uma matriz de distâncias ao quadrado.
\[ d_{AB} = \| \bar{X}_A - \bar{X}_B \|^2 \]O método de Ligação Mediana calcula a distância entre as medianas dos vetores em cada cluster. Esse método atribui pesos iguais a clusters de diferentes tamanhos, ao contrário do método do centróide, que é influenciado pelo número de vetores em cada cluster. Ele é mais robusto contra outliers e, a cada etapa, os dois clusters com a menor distância entre suas medianas são unidos.
\[ d_{AB} = \left\| \bar{m}_A - \bar{m}_B \right\|^2 \]O método de Ward calcula a distância entre dois clusters como o aumento na soma total dos quadrados causado pela fusão deles. Inicialmente, a soma dos quadrados começa em zero, pois cada ponto de dado é tratado como seu próprio cluster. À medida que os clusters são mesclados, a soma dos quadrados cresce. O método de Ward garante que esse crescimento seja minimizado em cada etapa, mantendo o aumento no erro quadrático total (SSE) o menor possível.
\[ \Delta(A, B) = \frac{n_A \cdot n_B}{n_A + n_B} \cdot \| \tilde{m}_A - \tilde{m}_B \|^2 \]Onde \(\tilde{m}_j\) é o centro do cluster \(j\), \(n_j\) é o número de pontos nele e \(\Delta(A, B)\) é chamado de custo de fusão ao combinar os clusters \(A\) e \(B\).
O Método de Grupo Pareado Ponderado com Média Aritmética (WPGMA) calcula a distância entre dois clusters através da média das distâncias entre seus elementos. Quando dois clusters são mesclados, a distância para qualquer outro cluster é a média das distâncias do cluster mesclado para o outro cluster, conforme mostrado abaixo:
\[ (D) C, AB = \frac{1}{2} \left( D(C, A) + D(C, B) \right) \]Após compreender os diferentes métodos de ligação no agrupamento hierárquico, o próximo passo é visualizar como os objetos ou pontos de dados são agrupados por meio de um dendrograma. Um dendrograma serve como uma representação visual das relações hierárquicas entre os clusters, ilustrando como os grupos são formados e o quão semelhantes ou diferentes eles são entre si durante o processo de agrupamento. A anatomia de um dendrograma consiste em vários componentes-chave:
Os dendrogramas são úteis para determinar a estrutura dos clusters e para decidir o número de grupos que você deseja identificar. Ao cortar o dendrograma em uma determinada altura, é possível definir o nível de dissimilaridade no qual deseja formar os clusters finais. Esses são conceitos essenciais para entender e aplicar os dendrogramas aos seus dados de acordo com seus objetivos.
Agora que cobrimos detalhadamente os métodos para construir dendrogramas e como interpretá-los, o próximo passo é aprender a criá-los utilizando R e Python, incluindo gráficos interativos para ambas as linguagens.
1) Gráfico em R
Para começar, certifique-se de ter as seguintes bibliotecas instaladas:
# Carregar bibliotecas necessárias
library(datasets)
library(tidyr)
library(dplyr)
library(collapsibleTree) # Para gráfico de árvore interativo
library(htmlwidgets) # Salvar o widget do gráfico
library(htmltools)
# Carregar dados
data("USArrests")
Para criar os dendrogramas, foi escolhido o conjunto de dados USArrests, que contém taxas de três tipos diferentes de crimes em cada estado dos EUA. Selecionando apenas as variáveis desses crimes, excluindo a variável "UrbanPop", para que não seja necessário escalonar todos os dados.
A função dist calcula a matriz de distâncias entre cada ponto de dado. Por padrão, a métrica de distância utilizada é a distância "euclidiana". Em seguida, é possível formar os clusters hierárquicos escolhendo um dos métodos mencionados acima, seguido da função de plotagem para visualização.
USArrests %>%
select(Murder, Assault, Rape) %>%
dist() %>%
hclust(method = "average") %>%
as.dendrogram() -> dend
plot(dend, type = "rectangle",
main = "Dendrograma das Taxas de Crimes Violentos por
Estado dos EUA (Ligação Média)"
)
Os dendrogramas podem ser exibidos em dois estilos diferentes. O da direita utiliza type = "triangle", enquanto o da esquerda, que é o padrão, utiliza type = "rectangle".
Outras personalizações possíveis incluem adicionar cores e marcadores para indicar onde cada cluster e suas folhas começam, ou alterar o dendrograma para um layout horizontal com horiz = TRUE.
plot(dend, odePar = list(pch = 1, cex = .5*2:1, col = 2:3),
horiz = F, main = "Dendrograma das Taxas de Crimes Violentos por
Estado dos EUA (Ligação Média)")
Avançando para o dendrograma interativo, os mesmos passos para organizar os dados serão seguidos, calculando a matriz de distâncias e criando os clusters hierárquicos. O que muda aqui é a configuração dos cortes ou ramos que surgem da raiz, assim como a decisão sobre o nome da raiz logo após.
dist_matrix <- dist(USArrests) # Calcular a matriz de distâncias
hc <- hclust(dist_matrix)
clusters <- cutree(hc, k = 3)
dend = as.dendrogram(hc)
parents <- paste0("Region", clusters)
Após salvar os nós pais e o dendrograma como objetos, um novo data.frame deve ser criado para organizar os rótulos, pais e raízes. Para este exemplo, escolhi a variável "Assault", mas o dendrograma para outras variáveis está disponível no repositório do GitHub.
labels <- labels(dend)
hierarchy_df <- data.frame(
State = labels,
Parent = parents, # Todos os estados são filhos da 'Raiz'
Assault = USArrests$Assault
)
Agora você pode criar o objeto para o gráfico interativo. É importante fazer ajustes para o título e salvar o gráfico em HTML para manter suas funcionalidades interativas ou dobráveis.
p <- collapsibleTree(
hierarchy_df,
root = "Regions",
hierarchy = c("Parent", "State", "Assault"), fill = "black"
)
prependContent(p,
tags$h2("Dendrograma Interativo das Taxas Regionais de Agressão nos EUA",
style = "text-align: center;"),
tags$h3("(Average Linked)", style = "text-align: center;")
)
saveWidget(p,
file = paste0(
"caminho_para_a_sua_pasta/dendrograma_interativo_ASSLT.html")
) # Salvar o gráfico em HTML
O resultado final para o collapsibleTree fica assim:
Agora que cobrimos as funções chave e os aspectos de criação de um dendrograma em R, podemos passar para o aprendizado de como criar dendrogramas em Python, incluindo um interativo, mas utilizando uma abordagem diferente.
2) Gráfico em Python
Comece importando as bibliotecas necessárias para manipulação de dados, criação de gráficos e as bibliotecas para o dendrograma interativo.
# Importe as bibliotecas necessárias
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.cluster import hierarchy
import plotly.figure_factory as ff # Para o dendrograma interativo
import scipy.cluster.hierarchy as sch # Para o dendrograma interativo
# Carregar dados
USArrests = pd.read_csv('caminho_para_o_seu_conjunto_de_dados/USArrests.csv', delimiter=',')
del USArrests['UrbanPop']
USArrests.set_index('Unnamed: 0', inplace=True)
USArrests.index.name = None
print(USArrests)
Comece configurando o método de agrupamento hierárquico, criando o objeto "Z" e plotando o resultado com a função .dendrogram.
Z = hierarchy.linkage(USArrests, 'average')
hierarchy.dendrogram(Z, leaf_rotation = 90, leaf_font_size = 6,
labels = USArrests.index)
# labels é uma sequência de tamanho n, onde n == Z.shape[0] + 1
plt.title('Dendrograma das Taxas de Crimes Violentos por Estado dos EUA (Ligação Média)')
plt.show()
Para o gráfico interativo, os passos são quase os mesmos: você cria o objeto do método de ligação, mas, para isso, os tamanhos do objeto Z e dos rótulos do conjunto de dados eram diferentes, então foi necessário remover um deles.
Z = sch.linkage(USArrests, method = 'average')
#print("Linkage matrix shape:", Z.shape) = 49
#print("Number of labels:", len(USArrests.index)) = 50
labels = USArrests.index.tolist()
labels_for_dendrogram = labels -1]
# Remover o último rótulo para corresponder ao número de clusters em Z (49 clusters)
fig = ff.create_dendrogram(Z, labels = labels_for_dendrogram)
fig.update_layout(
xaxis = dict(tickangle = -90),
title = "Dendrograma Interativo das Taxas de Crimes Violentos por Estado dos EUA"
)
fig.show()
O resultado é um dendrograma como este, onde você pode dar zoom para visualizar melhor os pontos desejados.
Conclusão
Os dendrogramas são ferramentas poderosas para visualizar o agrupamento hierárquico, ajudando-nos a entender as relações e semelhanças entre os pontos de dados. Ao usar R e Python, podemos criar tanto dendrogramas estáticos quanto interativos para obter insights mais profundos sobre nossos dados. É importante entender os diferentes métodos de agrupamento hierárquico, como single linkage, complete linkage, average linkage e método de Ward, já que cada um possui características e aplicações únicas. Dominar esses métodos e técnicas de visualização nos permite tomar decisões mais informadas ao analisar e interpretar dados.
Os dendrogramas não são apenas valiosos para visualizar o agrupamento hierárquico e entender os dados, mas também desempenham um papel importante nos métodos de aprendizado de máquina. Eles fornecem uma maneira clara de explorar as relações entre os pontos de dados, o que é essencial para tarefas como seleção de características, redução de dimensionalidade e detecção de anomalias. No aprendizado de máquina, o agrupamento hierárquico pode ajudar a descobrir padrões ocultos, agrupar pontos de dados semelhantes e auxiliar na tomada de decisões sobre como organizar conjuntos de dados para análises posteriores ou treinamento de modelos. Ao aplicar dendrogramas nesses contextos, podemos obter insights mais profundos e melhorar o desempenho geral dos algoritmos de aprendizado de máquina.
Espero que este guia incentive você a usar dendrogramas para análise, além de explorar os métodos disponíveis. Fique atento aos próximos posts da Série Gráficos, onde continuaremos a explorar o fascinante mundo dos dados e sua representação visual!
Siga no Instagram @minhaestatistica, e no GitHub!
Letícia - Minha Estatística.


Comentários
Postar um comentário