Я работаю с k-средствами в MATLAB. Вот мой код:Установка номера кластера на основе Centroid
load cobat.txt; % read the file
k=input('Enter a number: '); % determine the number of cluster
isRand=0; % 0 -> sequeantial initialization
% 1 -> random initialization
[maxRow, maxCol]=size(cobat);
if maxRow<=k,
y=[m, 1:maxRow];
else
% initial value of centroid
if isRand,
p = randperm(size(cobat,1)); % random initialization
for i=1:k
c(i,:)=cobat(p(i),:) ;
end
else
for i=1:k
c(i,:)=cobat(i,:); % sequential initialization
end
end
temp=zeros(maxRow,1); % initialize as zero vector
u=0;
while 1,
d=DistMatrix3(cobat,c); % calculate the distance
[z,g]=min(d,[],2); % set the matrix g group
if g==temp, % if the iteration doesn't change anymore
break; % stop the iteration
else
temp=g; % copy the matrix to the temporary variable
end
for i=1:k
f=find(g==i);
if f % calculate the new centroid
c(i,:)=mean(cobat(find(g==i),:),1)
end
end
c
sort(c)
end
y=[cobat,g]
«cobat» - это мой файл. Здесь это выглядит следующим образом:
65 80 55
45 75 78
36 67 66
65 78 88
79 80 72
77 85 65
76 77 79
65 67 88
85 76 88
56 76 65
«c» - это переменная центроида (центра кластера) для каждого кластера. «g» - это переменная, отображающая номер кластера. Проблема в том, что я хочу сортировать/сопоставлять номер кластера (от малого до большого) на основе центра тяжести (c). Итак, я пытаюсь сортировать (c), но это не влияет на номер кластера (g).
Когда я пытаюсь сортировать (g), он сортируется просто не так, как я хочу. Я хочу, чтобы номер кластера сортировался на основе центра тяжести. Пример; когда я запускаю код с к = 3, вот окончательный Centroid
73.0000 79.0000 70.6667 %C 1
58.3333 73.3333 84.6667 %C 2
36.0000 67.0000 66.0000 %C 3
Когда сортировать его, номер кластера также «отсортированных»,
36.0000 67.0000 66.0000 %C 3
58.3333 73.3333 70.6667 %C 2
73.0000 79.0000 84.6667 %C 1
Я хочу, номер кластера пригодится, вот так.
36.0000 67.0000 66.0000 %C 1
58.3333 73.3333 70.6667 %C 2
73.0000 79.0000 84.6667 %C 3
Это подходит, не отсортирован, поэтому, когда эта линия 'у = [cobat, г] выполняется, он тоже меняется.
Это кажется простым, но сложным. Я не мог понять. У кого-нибудь есть идея решить эту проблему?
спасибо.
Спасибо за ответ. Где я могу поместить этот скрипт? Я положил его после этой строки: 'sort (c)', это ошибка. Я пробую другое место (до 'y = [cobat, g]' line), он получает ошибку для одного и того же: '??? Индекс превышает размерность матрицы. Ошибка в ==> clustere at 49 c = c (index); ' Ваш ответ будет настолько полезен и высоко оценен. :) –
эти строки должны заменить сортировку, которую вы сейчас делаете. если вы используете 'sort', а не' sortrows', чем использовать '[g index] = sort (g); c = c (index); ' – Shai
еще раз благодарю вас за ответ. :) Я пробовал, ошибка все та же: '??? Индекс превышает размерность матрицы. Ошибка в ==> clustere at 47 c = c (index); 'It said 'превышает размер матрицы. Мой файл имеет 3 измерения, и как сделать этот код подходящим для трех измерений? :) –