R Language
Cluster gerarchico con hclust
Ricerca…
introduzione
Il pacchetto stats
fornisce la funzione hclust
per eseguire il clustering gerarchico.
Osservazioni
Oltre a hclust, sono disponibili altri metodi, vedere la Vista pacchetto CRAN su Clustering .
Esempio 1 - Uso di base di hclust, visualizzazione di dendrogramma, cluster di trama
La libreria cluster contiene i dati ruspini: un set standard di dati per illustrare l'analisi del cluster.
library(cluster) ## to get the ruspini data
plot(ruspini, asp=1, pch=20) ## take a look at the data
hclust si aspetta una matrice di distanza, non i dati originali. Calcoliamo l'albero usando i parametri di default e mostrandolo. Il parametro di blocco allinea tutte le foglie dell'albero lungo la linea di base.
ruspini_hc_defaults <- hclust(dist(ruspini))
dend <- as.dendrogram(ruspini_hc_defaults)
if(!require(dendextend)) install.packages("dendextend"); library(dendextend)
dend <- color_branches(dend, k = 4)
plot(dend)
Taglia l'albero per dare quattro grappoli e riempi i dati colorando i punti per cluster. k è il numero desiderato di cluster.
rhc_def_4 = cutree(ruspini_hc_defaults,k=4)
plot(ruspini, pch=20, asp=1, col=rhc_def_4)
Questo raggruppamento è un po 'strano. Possiamo ottenere un clustering migliore scalando prima i dati.
scaled_ruspini_hc_defaults = hclust(dist(scale(ruspini)))
srhc_def_4 = cutree(scaled_ruspini_hc_defaults,4)
plot(ruspini, pch=20, asp=1, col=srhc_def_4)
La misura di dissomiglianza predefinita per il confronto dei cluster è "completa". È possibile specificare una misura diversa con il parametro metodo.
ruspini_hc_single = hclust(dist(ruspini), method="single")
Esempio 2 - hclust e valori anomali
Con il clustering gerarchico, i valori anomali si presentano spesso come cluster a un punto.
Generare tre distribuzioni gaussiane per illustrare l'effetto dei valori anomali.
set.seed(656)
x = c(rnorm(150, 0, 1), rnorm(150,9,1), rnorm(150,4.5,1))
y = c(rnorm(150, 0, 1), rnorm(150,0,1), rnorm(150,5,1))
XYdf = data.frame(x,y)
plot(XYdf, pch=20)
Costruisci la struttura del cluster, dividerla in tre cluster.
XY_sing = hclust(dist(XYdf), method="single")
XYs3 = cutree(XY_sing,k=3)
table(XYs3)
XYs3
1 2 3
448 1 1
Ho trovato due valori anomali e ho messo tutto il resto in un unico grande cluster. Per ottenere i cluster "reali", potrebbe essere necessario impostare k più alto.
XYs6 = cutree(XY_sing,k=6)
table(XYs6)
XYs6
1 2 3 4 5 6
148 150 1 149 1 1
plot(XYdf, pch=20, col=XYs6)
Questo post di StackOverflow ha alcune indicazioni su come scegliere il numero di cluster, ma tenere presente questo comportamento nel clustering gerarchico.