例子:
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识别这些聚类,并以不同颜色绘制聚类作为证明。我尝试过:
[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五次,并为质心选择某种平均值。我还重新启动了matlab,以防出现某种故障。
编辑:忽略上面:
我以为问题已经解决了,所以我尝试着寻找合适的k值。我输入了k=1,运行了一切,然后k=2,然后k=3,我注意到我再次犯了同样的错误。