Dove tagliare un dendrogramma?


61

Il clustering gerarchico può essere rappresentato da un dendrogramma. Tagliare un dendrogramma a un certo livello dà una serie di cluster. Il taglio ad un altro livello offre un altro gruppo di cluster. Come sceglieresti dove tagliare il dendrogramma? C'è qualcosa che potremmo considerare un punto ottimale? Se guardo un dendrogramma nel tempo mentre cambia, dovrei tagliare nello stesso punto?


Mi sono anche chiesto di questo problema, ma (purtroppo) non ho ancora trovato risposte convincenti. Penso che non ci sia soluzione. Esistono pacchetti R / BioC come hopack(e altri) che possono stimare il numero di cluster, ma questo non risponde alla tua domanda.
suncoolsu,

Il pvclustpacchetto per Rha funzioni che forniscono valori p di bootstrap per i cluster di dendrogrammi, che consente di identificare i gruppi: is.titech.ac.jp/~shimo/prog/pvclust
Ben

Un sito utile con alcuni esempi su come farlo in pratica: versodatascience.com/…
Mikko

Risposte:


46

Non esiste una risposta definitiva poiché l'analisi dei cluster è essenzialmente un approccio esplorativo; l'interpretazione della struttura gerarchica risultante dipende dal contesto e spesso diverse soluzioni sono ugualmente valide dal punto di vista teorico.

In una domanda correlata sono stati forniti diversi indizi: quali criteri di arresto per il raggruppamento gerarchico agglomerato vengono utilizzati nella pratica? In genere utilizzo criteri visivi, ad esempio grafici di silhouette, e qualche tipo di criterio numerico, come l'indice di validità di Dunn, la gamma di Hubert, il coefficiente G2 / G3 o l'indice Rand corretto. Fondamentalmente, vogliamo sapere quanto è approssimata la matrice di distanza originale nello spazio del cluster, quindi è utile anche una misura della correlazione copenica . Uso anche k-medie, con diversi valori iniziali e la statistica gap ( mirror ) per determinare il numero di cluster che minimizzano gli SS-interni. La concordanza con il clustering gerarchico di Ward dà un'idea della stabilità della soluzione di cluster (è possibile utilizzarematchClasses()nel pacchetto e1071 per quello).

Potrai trovare le risorse utili nel CRAN Task View cluster , tra cui pvclust , FPC , CLV , tra gli altri. Vale anche la pena provare il pacchetto clValid ( descritto nel Journal of Statistical Software ).

Ora, se i tuoi cluster cambiano nel tempo, questo è un po 'più complicato; perché scegliere la prima soluzione cluster piuttosto che un'altra? Ti aspetti che alcuni individui si spostino da un cluster all'altro a seguito di un processo sottostante che si evolve nel tempo?

Ci sono alcune misure che cercano di abbinare i cluster che hanno una sovrapposizione assoluta o relativa massima, come ti è stato suggerito nella domanda precedente. Guarda il confronto tra cluster: una panoramica di Wagner e Wagner.


12

Non c'è davvero una risposta. È da qualche parte tra 1 e N.

Tuttavia, puoi pensarci dal punto di vista del profitto.

Ad esempio, nel marketing si usa la segmentazione, che è molto simile al clustering.

Un messaggio (un annuncio o una lettera, diciamo) che è su misura per ogni individuo avrà il più alto tasso di risposta. Un messaggio generico adattato alla media avrà il tasso di risposta più basso. Dire tre messaggi su misura per tre segmenti sarà da qualche parte nel mezzo. Questo è il lato delle entrate.

Un messaggio su misura per ogni individuo avrà il costo più alto. Un messaggio generico adattato alla media avrà il costo più basso. Tre messaggi su misura per tre segmenti saranno da qualche parte nel mezzo.

Supponiamo che pagare uno scrittore per scrivere un messaggio personalizzato costa 1000, due costano 2000 e così via.

Ad esempio, utilizzando un messaggio, le entrate saranno pari a 5000. Se hai segmentato i tuoi clienti in 2 segmenti e hai scritto messaggi su misura per ciascun segmento, il tasso di risposta sarà più elevato. Supponiamo che i ricavi siano ora 7500. Con tre segmenti, un tasso di risposta leggermente superiore e i tuoi ricavi sono 9000. Un altro segmento e sei a 9500.

Per massimizzare il profitto, continua a segmentare fino a quando le entrate marginali della segmentazione non equivalgono al costo marginale della segmentazione. In questo esempio, useresti tre segmenti per massimizzare il profitto.

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

Questa è una prospettiva interessante!
AndyF,

5

Forse uno dei metodi più semplici sarebbe una rappresentazione grafica in cui l'asse x è il numero di gruppi e l'asse y qualsiasi metrica di valutazione come la distanza o la somiglianza. In quella trama di solito è possibile osservare due regioni differenziate, essendo il valore dell'asse x al 'ginocchio' della linea il numero 'ottimale' di cluster.

Esistono anche alcune statistiche che potrebbero svolgere questo compito: gamma di Hubert, pseudo-t², pseudo-F o criteri di raggruppamento cubico (CCC) tra gli altri.


Sono d'accordo con chl. Le analisi dei cluster sono approcci esplorativi e l'interpretazione dei risultati, in questo caso particolare il numero ottimale di cluster, dipende dal contesto. Ad esempio, nel mio lavoro è comune utilizzare le analisi dei cluster per classificare gli individui in base a diverse caratteristiche e talvolta il numero di cluster è preimpostato. In questo caso, il nostro obiettivo è trovare l'insieme di variabili classificatorie che meglio distingue gli individui appartenenti a diversi cluster.
Manuel Ramón,


3

Nel clustering gerarchico il numero di partizioni di output non è solo i tagli orizzontali, ma anche i tagli non orizzontali che decidono il clustering finale. Quindi questo può essere visto come un terzo criterio a parte 1. la metrica della distanza e 2. Criterio di collegamento . http://en.wikipedia.org/wiki/Hierarchical_clustering

Il criterio che hai citato è un terzo tipo che è una sorta di vincolo di ottimizzazione sull'insieme di partizioni nella gerarchia. Questo è formalmente presentato in questo documento e vengono forniti esempi di segmentazione!

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


1

Come hanno detto le altre risposte, è decisamente soggettivo e dipende dal tipo di granularità che stai cercando di studiare. Per un approccio generale, ho tagliato questo per darmi 2 cluster e 1 outlier. Mi concentrerei quindi sui due cluster per vedere se ci fosse qualcosa di significativo tra loro.

# 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)

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.