Estou lendo um livro "Machine learning with Spark", de Nick Pentreath, e na página 224-225 o autor discute sobre o uso de meios K como forma de redução de dimensionalidade.
Eu nunca vi esse tipo de redução de dimensionalidade, ele tem um nome ou é útil para formas específicas de dados ?
Cito o livro que descreve o algoritmo:
Suponha que agrupemos nossos vetores de recursos de alta dimensão usando um modelo de agrupamento K-means, com k clusters. O resultado é um conjunto de k centros de cluster.
Podemos representar cada um dos nossos pontos de dados originais em termos de quão longe está de cada um desses centros de cluster. Ou seja, podemos calcular a distância de um ponto de dados para cada centro de cluster. O resultado é um conjunto de k distâncias para cada ponto de dados.
Essas distâncias k podem formar um novo vetor de dimensão k. Agora podemos representar nossos dados originais como um novo vetor de menor dimensão, em relação à dimensão do recurso original.
O autor sugere uma distância gaussiana.
Com 2 clusters para dados bidimensionais, tenho o seguinte:
K-significa:
Aplicando o algoritmo com a norma 2:
Aplicando o algoritmo a uma distância gaussiana (aplicando dnorm (abs (z))):
Código R para as imagens 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")