2016-11-19 4 views
0

У меня есть 525 данных, которые я сгруппировал на 2 части, используя функцию kmeans. Когда у меня есть тестовые данные, я хочу включить их в кластер. Для этого мне нужно измерить расстояние тестовых данных и центроид обоих кластеров. Наименьшее расстояние означает, что данные находятся в этом кластере.Разделение данных теста на k-средний кластер в matlab

Как это сделать?

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