R Language
Clustering jerárquico con hclust
Buscar..
Introducción
El paquete de stats
proporciona la función hclust
para realizar la agrupación jerárquica.
Observaciones
Además de hclust, hay otros métodos disponibles, consulte la Vista del paquete CRAN en Clustering .
Ejemplo 1 - Uso básico de hclust, visualización de dendrograma, agrupamientos de parcelas
La biblioteca de clústeres contiene los datos ruspini, un conjunto estándar de datos para ilustrar el análisis de clústeres.
library(cluster) ## to get the ruspini data
plot(ruspini, asp=1, pch=20) ## take a look at the data
hclust espera una matriz de distancia, no los datos originales. Calculamos el árbol utilizando los parámetros predeterminados y lo mostramos. El parámetro de colgar alinea todas las hojas del árbol a lo largo de la línea de 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)
Corte el árbol para dar cuatro grupos y vuelva a trazar los datos coloreando los puntos por grupo. k es el número deseado de grupos.
rhc_def_4 = cutree(ruspini_hc_defaults,k=4)
plot(ruspini, pch=20, asp=1, col=rhc_def_4)
Este agrupamiento es un poco extraño. Podemos obtener un mejor agrupamiento agrupando los datos primero.
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 medida de disimilitud predeterminada para comparar clústeres es "completa". Puede especificar una medida diferente con el parámetro del método.
ruspini_hc_single = hclust(dist(ruspini), method="single")
Ejemplo 2 - hclust y valores atípicos
Con la agrupación jerárquica, los valores atípicos a menudo aparecen como agrupaciones de un punto.
Genere tres distribuciones gaussianas para ilustrar el efecto de los valores atípicos.
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)
Construye la estructura del cluster, divídelo en tres cluster.
XY_sing = hclust(dist(XYdf), method="single")
XYs3 = cutree(XY_sing,k=3)
table(XYs3)
XYs3
1 2 3
448 1 1
hclust encontró dos valores atípicos y puso todo lo demás en un gran grupo. Para obtener los clústeres "reales", es posible que deba establecer k más 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)
Esta publicación de StackOverflow tiene algunas pautas sobre cómo elegir el número de clústeres, pero tenga en cuenta este comportamiento en el clúster jerárquico.