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?