Conglomerados
Índice
1 No jerárquicos
- Requieren fijar de antemano el número de conglomerados.
- Probar distintos números para
- Adaptar al objetivo
- Mejorar la interpretación
- Número de grupos mayor que el deseado permite detectar atípicos
1.1 \(k\) medias
- El más usado.
- Algoritmo
- Elegir los "centros" de cada clase (habitualmente, al azar).
- Asignar a cada individuo la clase con el centro más próximo.
- Recalcular los centros minimizando suma de distancias cuadráticas.
- Repetir hasta que los centros no cambien.
kmeans
enR
- Devuelve lista con
- cluster
- Vector de enteros indicando a qué conglomerado pertenece cada individuo.
- centers
- Matriz con coordenadas de los centros.
- totss
- Suma de cuadrados total.
- withinss
- Vector de sumas de cuadrados intra conglomerado.
- tot.withinss
sum(withinss)
- betweenss
totss-tot.withinss
(suma de cuadrados entre conglomerados).- size
- Número de individuos en cada conglomerado.
- iter
- Número de iteraciones.
Ejemplo (
?kmeans
)x <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2), matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2)) colnames(x) <- c("x", "y") (cl <- kmeans(x, 2)) plot(x, col = cl$cluster) points(cl$centers, col = 1:2, pch = 8, cex = 2) points(x, col = rep(1:2, each=50), pch=16, cex=.7)
Ejemplo (
?kmeans
)## nstart para repetir varias veces ## y considerar el mejor ajuste: (cl <- kmeans(x, 5, nstart = 25)) plot(x, col = cl$cluster) points(cl$centers, col = 1:5, pch = 8)
Ejemplo (
iris
)c2 = kmeans (subset (iris, , -Species), 2) plot (iris[,grep("Petal",names(iris))], col=c2$cluster) c3 = kmeans (subset (iris, , -Species), 3) plot (iris[,grep("Petal",names(iris))], col=c3$cluster)
- Devuelve lista con
2 Jerárquicos
2.1 Distancias
euclídea (por omisión) \[\sqrt{\sum (x_i-y_i)^2}\]
d = dist (iris[,1:4]) D = as.matrix (d) D[1:5,48:52] # de 5 setosas a 3 setosas (48:50) y 2 versi (51:52) which (D == max(d), arr.ind=TRUE) # las más separadas dist (rbind (c(0,0), c(1,1), c(1,2)))
maximum
(norma del supremo) \[\|\vec x-\vec y\|_\infty = \max |x_i-y_i|\]dist (rbind (c(0,0), c(1,1), c(1,2)), "maximum")
manhattan
(ensanche hipodámico) \[{\sum |x_i-y_i|}\]dist (rbind (c(0,0), c(1,1), c(1,2)), "manhattan")
canberra
(relativa) \[\sum\dfrac{|x_i-y_i|}{|x_i|+|y_i|}\]- los términos 0/0 se omiten
- usada con recuentos
binary
(binaria asimétrica) \[\dfrac{\text{(número de 01)} + \text{(número de 10)}} {\text{(número de 01)} + \text{(número de 10)} + \text{(número de 11)}}\]- proporción de distintos entre aquéllos que no son 00
minkowski
\[\left(\sum(x_i-y_i)^p\right)^{\frac1p}\]
2.2 Agrupación
- Inicialmente, cada individuo se asigna a su propio conglomerado.
- En cada etapa
- Se juntan los conglomerados más cercanos.
- Se recalculan las distancias entre conglomerados.
- Se acaba con un conglomerado único.
- Hay distintos métodos de recálculo o agrupación.
2.2.1 Ward
- Método de varianza mínima.
- Encuentra conglomerados compactos, esféricos.
- Dos versiones
ward.D
(usa distancias crudas)ward.D2
(usa distancias al cuadrado)
2.2.2 complete
- "Vecino más lejano" o "salto máximo".
- Distancia entre los dos individuos más alejados.
- Usado por omisión.
- Encuentra conglomerados similares.
2.2.3 single
- "Amigos de amigos", "salto mínimo" o "vecino más próximo".
- Distancia entre los dos individuos más próximos.
- Suele dar los resultados más distintos a los otros métodos.
2.2.4 centroid
- Considera distancias entre medias de conglomerados (sus centros de gravedad).
2.2.5 median
- Considera distancias entre medianas de conglomerados.
2.2.6 average
- UPGMA, Unweighted Pair Group Method with Arithmetic Mean
- Media de las distancias entre un individuo \(\vec x\) de un conglomerado \(C_i\)y un individuo \(\vec y\) del otro \(C_j\). \[a(C_i,C_j)=\displaystyle \frac1{n_i n_j} \sum_{\vec x\in C_i}\sum_{\vec y\in C_j} d(\vec x,\vec y) \]
2.2.7 mcquitty
- WPGMA, Weighted Pair Group Method with Arithmetic Mean
- Parecido al
average
, pero tiene en cuenta la subdivisión previa de los conglomerados:- Sea un conglomerado \(C_i\cup C_j\) formado al unirse \(C_i\) y \(C_j\) en la etapa anterior.
- Se quiere calcular su distancia respecto a otro conglomerado \(C_k\).
average
usa \[a(C_i\cup C_j,C_k) = \displaystyle \frac{n_i}{n_i+n_j}a(C_i,C_k) + \frac{n_j}{n_i+n_j}a(C_j,C_k)\]mcquitty
usa \[a(C_i\cup C_j,C_k) = \displaystyle \frac12a(C_i,C_k) + \frac12a(C_j,C_k)\]
2.3 Ejemplo
d <- dist (scale (mtcars)) h <- hclust (d) plot (h) ## cinco grupos cutree (h, 5) plot (h) rect.hclust (h, 5) ## vecinos cercanos h <- hclust (d, "single") plot (h)