在matlab中使用k均值聚类对3d散射数据进行聚类

时间:2017-07-17 20:12:52

标签: matlab plot 3d k-means scatter

我有一个以数组形式组织的三维散点图。当我将数据绘制为三维散点图时,我获得了两个清晰的簇 - 左边一个较小,右边一个较大。 enter image description here

我尝试过k-means聚类,但是我获得了这两个聚类而不是我想要的两个聚类: enter image description here

这是我的代码:

opts = statset('Display','final');
[idx,C] = kmeans(data,2,'Distance','cityblock',...'Replicates',5,'Options',opts);
figure;
plot3(data(idx==1,1),data(idx==1,2),data(idx==1,3),'r.','MarkerSize',12)
plot3(data(idx==2,1),data(idx==2,2),data(idx==2,3),'b.','MarkerSize',12)
plot3(C(:,1),C(:,2),C(:,3),'cx',...'MarkerSize',15,'LineWidth',3)
legend('Cluster 1','Cluster 2','Centroids',...'Location','NW')
title 'Cluster Assignments and Centroids'
hold off

如何改变我的代码,以便获得2个集群(左边一个小集群,右边一个大集群),而不是我现在拥有的上下集群?非常感谢!

2 个答案:

答案 0 :(得分:1)

转换左右数据* 10以增加变量的权重,这将导致您想要的集群拆分

答案 1 :(得分:0)

更改为plot3并添加C(:,3),这对我有用:

data=rand(100,3);
data=[data;2+rand(50,3)];

opts = statset('Display','final');
[idx,C] = kmeans(data,2,'Distance','cityblock','Replicates',5,'Options',opts);
figure(1);cla;gca;hold on;
plot3(data(idx==1,1),data(idx==1,2),data(idx==1,3),'r.','MarkerSize',12)
plot3(data(idx==2,1),data(idx==2,2),data(idx==2,3),'b.','MarkerSize',12)
plot3(C(:,1),C(:,2),C(:,3),'cx','MarkerSize',15,'LineWidth',3)
legend('Cluster 1','Cluster 2','Centroids','Location','NW')
title('Cluster Assignments and Centroids');
hold off