2016-11-19 30 views
0

我有525个数据,我已经使用kmeans函数将它们聚类为2个部分。当我有一个测试数据时,我想把它放入一个集群。为此,我必须测量两个群集的测试数据和质心的距离。最低距离表示数据在该群集上。将测试数据划分为matlab中的k均值簇

我该怎么做?

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

这是伪代码?或者是什么?什么是'C','TEST','testclust'? – EBH

+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);