在 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以增加变量的权重,这应该会导致您想要的集群拆分
我有一个组织在数组中的 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以增加变量的权重,这应该会导致您想要的集群拆分