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

Clustering 3d scatter data using k-means clustering in matlab

我有一个组织在数组中的 3d 散点图。当我将数据绘制为 3d 散点图时,我获得了 2 个清晰的簇 - 一个较小的在左边,一个大的在右边。

我已经尝试过 k 均值聚类,但我获得了这 2 个聚类,而不是我想要的两个:

这是我的代码:

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 个簇(左边一小簇,右边一大簇),而不是我现在拥有的上下簇?非常感谢!

更改为 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

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