Onde cortar um dendrograma?


61

O cluster hierárquico pode ser representado por um dendograma. Cortar um dendrograma em um determinado nível fornece um conjunto de clusters. Cortar em outro nível fornece outro conjunto de clusters. Como você escolheria onde cortar o dendrograma? Existe algo que poderíamos considerar um ponto ideal? Se eu olhar um dendrograma ao longo do tempo, à medida que ele muda, devo cortar no mesmo ponto?


Também me perguntei sobre esse problema, mas (infelizmente) ainda não encontrei respostas convincentes. Eu acho que não há solução. Existem pacotes R / BioC como hopack(e outros) que podem estimar o número de clusters, mas isso não responde à sua pergunta.
suncoolsu

O pvclustpacote para Rtem funções que dão bootstrap p-valores para clusters de dendrograma, o que lhe permite identificar grupos: is.titech.ac.jp/~shimo/prog/pvclust
Ben

Um site útil com alguns exemplos de como fazê-lo na prática: towardsdatascience.com/…
Mikko

Respostas:


46

Não há resposta definitiva, pois a análise de cluster é essencialmente uma abordagem exploratória; a interpretação da estrutura hierárquica resultante é dependente do contexto e, muitas vezes, várias soluções são igualmente boas do ponto de vista teórico.

Várias pistas foram dadas em uma pergunta relacionada: Quais critérios de parada para agrupamento hierárquico aglomerativo são usados ​​na prática? Eu geralmente uso critérios visuais, por exemplo, gráficos de silhueta e algum tipo de critério numérico, como o índice de validade de Dunn, a gama de Hubert, o coeficiente G2 / G3 ou o índice de Rand corrigido. Basicamente, queremos saber quão bem a matriz de distância original é aproximada no espaço do cluster, portanto, uma medida da correlação copenética também é útil. Eu também uso k-means, com vários valores iniciais, e a estatística de gap ( espelho ) para determinar o número de clusters que minimizam o dentro da SS. A concordância com o cluster hierárquico de Ward fornece uma idéia da estabilidade da solução de cluster (você pode usarmatchClasses()no pacote e1071 para isso).

Você encontrará recursos úteis no CRAN Task View Cluster , incluindo pvclust , fpc , clv , entre outros. Também vale a pena tentar o pacote clValid ( descrito no Journal of Statistical Software ).

Agora, se seus clusters mudarem com o tempo, isso é um pouco mais complicado; por que escolher a primeira solução de cluster em vez de outra? Você espera que algumas pessoas se movam de um cluster para outro como resultado de um processo subjacente evoluindo com o tempo?

Existem algumas medidas que tentam corresponder clusters com uma sobreposição absoluta ou relativa máxima, conforme sugerido na pergunta anterior. Veja Comparando agrupamentos - uma visão geral de Wagner e Wagner.


12

Não há realmente uma resposta. É algo entre 1 e N.

No entanto, você pode pensar sobre isso da perspectiva do lucro.

Por exemplo, no marketing, usa-se segmentação, que é muito parecida com cluster.

Uma mensagem (um anúncio ou carta, digamos), personalizada para cada indivíduo, terá a maior taxa de resposta. Uma mensagem genérica adaptada à média terá a menor taxa de resposta. Dito isto, três mensagens personalizadas para três segmentos estarão em algum lugar no meio. Este é o lado da receita.

Uma mensagem personalizada para cada indivíduo terá o custo mais alto. Uma mensagem genérica adaptada à média terá o menor custo. Três mensagens personalizadas para três segmentos estarão em algum lugar no meio.

Digamos que pagar a um escritor para escrever uma mensagem personalizada custa 1.000, dois custam 2000 e assim por diante.

Digamos, usando uma mensagem, sua receita será de 5000. Se você segmentou seus clientes em 2 segmentos e escreveu mensagens personalizadas para cada segmento, sua taxa de resposta será maior. Digamos que as receitas agora sejam 7500. Com três segmentos, uma taxa de resposta um pouco mais alta e suas receitas são 9000. Mais um segmento e você está com 9500.

Para maximizar o lucro, continue segmentando até que a receita marginal da segmentação seja igual ao custo marginal da segmentação. Neste exemplo, você usaria três segmentos para maximizar o lucro.

Segments  Revenue  Cost  Profit
1         5000     1000  4000
2         7500     2000  5500
3         9000     3000  6000
4         9500     4000  5500

Essa é uma perspectiva interessante!
AndyF

5

Talvez um dos métodos mais simples seja uma representação gráfica na qual o eixo x é o número de grupos e o eixo y qualquer métrica de avaliação como a distância ou a semelhança. Nesse gráfico, você geralmente pode observar duas regiões diferenciadas, sendo o valor do eixo x no 'joelho' da linha o número 'ideal' de cluster.

Existem também algumas estatísticas que podem ajudar nessa tarefa: gama de Hubert, pseudo-t², pseudo-F ou critérios de agrupamento cúbico (CCC), entre outros.


Estou de acordo com chl. As análises de cluster são abordagens exploratórias e a interpretação dos resultados, para esse caso em particular, o número ideal de clusters, depende do seu contexto. Por exemplo, no meu trabalho, é comum as análises de cluster usadas para classificar indivíduos com base em várias características e, às vezes, o número de clusters é predefinido. Nesse caso, nosso objetivo é encontrar o conjunto de variáveis ​​classificatórias que melhor distingam os indivíduos pertencentes a diferentes grupos.
Manuel Ramón


3

No agrupamento hierárquico, o número de partições de saída não é apenas os cortes horizontais, mas também os cortes não horizontais que decidem o agrupamento final. Portanto, isso pode ser visto como um terceiro critério, à parte a métrica da distância 1. e o critério 2. Linkage . http://en.wikipedia.org/wiki/Hierarchical_clustering

O critério que você mencionou é um terceiro tipo, que é uma espécie de restrição de otimização no conjunto de partições na hierarquia. Isso é formalmente apresentado neste artigo e são apresentados exemplos de segmentação!

http://www.esiee.fr/~kiranr/ClimbingECCV2012_Preprint.pdf


1

Como as outras respostas disseram, é definitivamente subjetivo e depende de que tipo de granularidade você está tentando estudar. Para uma abordagem geral, eu cortei este para me dar 2 grupos e 1 outlier. Depois, focaria nos dois grupos para ver se havia algo significativo entre eles.

# Init
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()

# Load data
from sklearn.datasets import load_diabetes

# Clustering
from scipy.cluster.hierarchy import dendrogram, fcluster, leaves_list
from scipy.spatial import distance
from fastcluster import linkage # You can use SciPy one too

%matplotlib inline

# Dataset
A_data = load_diabetes().data
DF_diabetes = pd.DataFrame(A_data, columns = ["attr_%d" % j for j in range(A_data.shape[1])])

# Absolute value of correlation matrix, then subtract from 1 for disimilarity
DF_dism = 1 - np.abs(DF_diabetes.corr())

# Compute average linkage
A_dist = distance.squareform(DF_dism.as_matrix())
Z = linkage(A_dist,method="average")

# Dendrogram
D = dendrogram(Z=Z, labels=DF_dism.index, color_threshold=0.7, leaf_font_size=12, leaf_rotation=45)

insira a descrição da imagem aqui

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.