Matlab:kmeans聚类提供了意想不到的聚类

时间:2015-05-04 07:21:35

标签: matlab cluster-analysis k-means

示例:

load kmeansdata %provides X variable
Y=bsxfun(@minus,X,mean(X,2))'/sqrt(size(X,2)-1); %normalized and means adjusted
[~,~,PC] = svd(Y); %
plot(PC(:,1),PC(:,2),'m.','markersize',15)

绘制前两列,您将看到3个群集。我想使用kmeans识别这些簇,并绘制不同颜色的簇作为prood。我试过了:

[idx,cntrd] = kmeans(PC(:,1:2),3,'Distance','sqEuclidean');%,'Distance','correlation');

cluster=3;
Col = {'.b','.r','.g','.y','.m','.c','.k'}; % Cell array of colours.
figure;
hold on
for clus=1:cluster
  plot(PC(idx==clus,1),PC(idx==clus,2),Col{clus},'MarkerSize',12)  
end
plot(cntrd(:,1),cntrd(:,2),'kx','MarkerSize',15,'LineWidth',3) %plotting the centroids of the clusters

群集质心关闭,颜色不是我所期望的。有人可以帮忙吗?

编辑:有点回答:

我从mathworks网站复制了这段代码并替换了我的kmeans行:

opts = statset('Display','final');
[idx,C] = kmeans(PC(:,1:2),3,'Distance','cityblock',...
    'Replicates',5,'Options',opts);
它似乎有效,但我不太了解opts的作用。我认为,重复只是重复kmeans 5次,并为质心选取某种平均值。我还重新启动了matlab,以防出现某种故障

编辑:忽略上面:

我认为问题已经解决了,所以我试着寻找合适的k值。我输入k = 1,运行一切,然后k = 2,然后k = 3,我注意到我又犯了同样的错误

1 个答案:

答案 0 :(得分:0)

kmeans可能对初始质心位置敏感。问题似乎是用于选择起点的算法。例如,你可以通过运行这个来获得预期的答案:

[idx,cntrd] = kmeans(PC(:,1:2),3, 'start', [-0.05 0; 0 0; 0.05  0]);

看起来也可能是骗人的。在这种情况下,数据的分散在x和y维度上不相等。因此,对于一些点对,欧几里德距离在视觉簇之间并不像在簇内那样远。

您可以考虑为此数据使用Guassian分布模型的混合。