1 votos

Implementación del Algoritmo Kmeans en R, los resultados son diferentes en las distintas ejecuciones

He implementado kmeans clustering en el conjunto de datos del iris (conjunto de datos incorporado) en R. El código se da a continuación:

X=as.matrix(iris[-5]);

K=3;

prevCentroids=matrix(0,K,dim(X)[2]);
centroids=X[sample(1:dim(X)[1],K),];

dot=numeric(3);
C=numeric(150);

while(!isTRUE(all.equal(centroids,prevCentroids)))
{
 for(i in 1:dim(X)[1])
 {
   for(j in 1:dim(centroids)[1])
    {
      dot[j]=(X[i,]-centroids[j,])%*%(X[i,]-centroids[j,]);
    }
      C[i]=which.min(dot);
 }

   prevCentroids=centroids;

   for(k in 1:K)
    {
     centroids[k,]=colMeans(X[which(C==k),]);
    }
}

print(cbind(iris,C));

A veces, con este código, consigo que el 85% de la agrupación sea correcta. Pero a veces, sólo obtengo un 37% de clustering correcto si lo comparo con el conjunto de datos del iris ya clusterizado.

¿Podría alguien decirme en qué me estoy equivocando?

¿Debo usar set.seed() aquí para realizar las particiones de manera similar cada vez? ¿Es así como se debe implementar kmeans? ¿Con set.seed()? ¿Para que cada vez obtengamos una agrupación correcta?

Si la respuesta es afirmativa, ¿cómo podemos utilizar set.seed() en el aprendizaje no supervisado? ¿Cómo entenderemos que set.seed() genera el mejor conjunto de variables aleatorias?

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X