我有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
有什么想法吗?
答案 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
,可以使用bsxfun:
dist_to_centers = bsxfun(@minus, permute(C,[1 3 2]), permute(TEST,[3 1 2]));
dist_to_centers = sum( dist_to_centers.^2, 3 );