我已经在 R 中对 iris 数据集(内置数据集)实现了 kmeans 聚类。代码如下:
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));
有时,使用这段代码,我可以得到 85% 的聚类正确率。但有时,如果我将它与已经聚集的内置虹膜数据集进行比较,它的正确率只有 37%。
谁能告诉我哪里出错了?
![Chire [公共领域],来自维基共享资源](https://i.stack.imgur.com/KygZy.png)