Je lis un livre "Machine learning with Spark" de Nick Pentreath, et à la page 224-225 l'auteur discute de l'utilisation de K-means comme une forme de réduction de dimensionnalité.
Je n'ai jamais vu ce type de réduction de dimensionnalité, a- t-il un nom ou / et est-il utile pour des formes spécifiques de données ?
Je cite le livre décrivant l'algorithme:
Supposons que nous regroupons nos vecteurs de caractéristiques de haute dimension en utilisant un modèle de regroupement K-means, avec k clusters. Le résultat est un ensemble de k centres de cluster.
Nous pouvons représenter chacun de nos points de données d'origine en termes de distance par rapport à chacun de ces centres de grappes. Autrement dit, nous pouvons calculer la distance d'un point de données à chaque centre de cluster. Le résultat est un ensemble de k distances pour chaque point de données.
Ces k distances peuvent former un nouveau vecteur de dimension k. Nous pouvons maintenant représenter nos données d'origine comme un nouveau vecteur de dimension inférieure, par rapport à la dimension de l'entité d'origine.
L'auteur suggère une distance gaussienne.
Avec 2 clusters pour des données bidimensionnelles, j'ai les éléments suivants:
K-signifie:
Appliquer l'algorithme avec la norme 2:
Application de l'algorithme avec une distance gaussienne (application de dnorm (abs (z)):
Code R pour les images précédentes:
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")