我认为kmeans() 不会输出这种跟踪信息。您最好的办法可能是多次重新运行kmeans(),并保留集群中心。
set.seed(1)
clus.1 <- kmeans(iris[,1:2],5,iter.max=1)
clus.2 <- kmeans(iris[,1:2],centers=clus.1$centers,iter.max=1)
clus.3 <- kmeans(iris[,1:2],centers=clus.2$centers,iter.max=1)
changing <- which(apply(cbind(clus.1$cluster,clus.2$cluster,clus.3$cluster),1,sd)>0)
changing
opar <- par(mfrow=c(1,3))
plot(iris[,c(1,2)],col=clus.1$cluster,pch=19,main="Iteration 1")
points(iris[changing,c(1,2)],pch=21,cex=2)
plot(iris[,c(1,2)],col=clus.2$cluster,pch=19,main="Iteration 2")
points(iris[changing,c(1,2)],pch=21,cex=2)
plot(iris[,c(1,2)],col=clus.3$cluster,pch=19,main="Iteration 3")
points(iris[changing,c(1,2)],pch=21,cex=2)
par(opar)
我指出确实改变集群成员的点;不幸的是,只有一个人这样做,因为kmeans() 收敛得非常快;-)
您写道,您希望“在每次迭代时让它们移动到它们的集群中”。当然,点在聚类算法中不会移动。所以像这样的颜色编码表示是你最好的选择。
二维以上的可以试试pairs(),或者只关注二维。准备好解释为什么 n 维集群在投影到二维时看起来不像“集群”。