在matlab中将测试数据划分为k均值聚类

时间:2016-11-19 17:50:27

标签: matlab cluster-analysis k-means

我有525个数据,我使用kmeans函数将其聚为2个部分。当我有测试数据时,我想将其相应地放入集群中。要做到这一点,我必须测量测试数据的距离和两个集群的质心。最低距离意味着数据在该群集上。

我该怎么做?

PS:数据有9个输入,这意味着每个数据由9个值组成。

以下是我的尝试:

for n = 1:174
  for k = 1:9
  testclust1(n,k) = C(1,k)-TEST(n,k)
  testclust2(n,k) = C(2,k)-TEST(n,k)
end 
if testclust1(1,:) <= testclust2(1,:)
%then cluster 1 else cluster 2
end

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用pdist2

 dist_to_centers = pdist2(C, TEST);  

dist_to_centers是2×174矩阵,每个测试点到中心的距离。

 idx_of_test_points_in_first = find(dist_to_centers(1,:)<=dist_to_centers(2,:)); 
 idx_of_test_points_in_second = find(dist_to_centers(1,:)>dist_to_centers(2,:));

如果您想手动计算dist_to_centers,可以使用

dist_to_centers = bsxfun(@minus, permute(C,[1 3 2]), permute(TEST,[3 1 2]));
dist_to_centers = sum( dist_to_centers.^2, 3 );