Estoy leyendo un libro "Aprendizaje automático con chispa" de Nick Pentreath, y en la página 224-225 el autor discute sobre el uso de K-means como una forma de reducción de dimensionalidad.
Nunca he visto este tipo de reducción de dimensionalidad, ¿tiene un nombre o / y es útil para formas específicas de datos ?
Cito el libro que describe el algoritmo:
Supongamos que agrupamos nuestros vectores de características de alta dimensión utilizando un modelo de agrupación K-means, con k agrupaciones. El resultado es un conjunto de k centros de clúster.
Podemos representar cada uno de nuestros puntos de datos originales en términos de cuán lejos está de cada uno de estos centros de agrupación. Es decir, podemos calcular la distancia de un punto de datos a cada centro de clúster. El resultado es un conjunto de k distancias para cada punto de datos.
Estas k distancias pueden formar un nuevo vector de dimensión k. Ahora podemos representar nuestros datos originales como un nuevo vector de dimensión inferior, en relación con la dimensión de entidad original.
El autor sugiere una distancia gaussiana.
Con 2 grupos para datos bidimensionales, tengo lo siguiente:
K-significa:
Aplicando el algoritmo con la norma 2:
Aplicando el algoritmo con una distancia gaussiana (aplicando dnorm (abs (z)):
Código R para las imágenes anteriores:
set.seed(1)
N1 = 1000
N2 = 500
z1 = rnorm(N1) + 1i * rnorm(N1)
z2 = rnorm(N2, 2, 0.5) + 1i * rnorm(N2, 2, 2)
z = c(z1, z2)
cl = kmeans(cbind(Re(z), Im(z)), centers = 2)
plot(z, col = cl$cluster)
z_center = function(k, cl) {
return(cl$centers[k,1] + 1i * cl$centers[k,2])
}
xlab = "distance to cluster center 1"
ylab = "distance to cluster center 2"
out_dist = cbind(abs(z - z_center(1, cl)), abs(z - z_center(2, cl)))
plot(out_dist, col = cl$cluster, xlab = xlab, ylab = ylab)
abline(a=0, b=1, col = "blue")
out_dist = cbind(dnorm(abs(z - z_center(1, cl))), dnorm(abs(z - z_center(2, cl))))
plot(out_dist, col = cl$cluster, xlab = xlab, ylab = ylab)
abline(a=0, b=1, col = "blue")