2016-11-19 81 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);