带
X = [1.8421 4.6076;
5.6586 4.8;
6.3526 3.2909;
2.904 4.6122;
3.232 4.9399;
1.2479 4.9327]
和
centroids = [3 3;
6 2;
8 5]
我正在尝试找到x中每个点最近的质心。我正在使用Octave进行编码,这是我的代码
K = size(centroids, 1);
idx = zeros(size(X,1), 1); %idx is the vector storing the index of the closest centroid
for e = 1: size(X,1)
difference(1, :) = X(e,:) - centroids(1,:);
min_distance = sum(difference(1,:).^2);
for j = 2:K
difference(j, :) = X(e,:) - centroids(j,:);
distance = sum(difference.^2);
if distance<min_distance
min_distance = distance;
idx(e) = centroids(j);
endif
endfor
endfor
该代码有效,但我只能得到
idx = 0 0 0
对于x的前三个条目
计算时,操作数的大小必须保持一致距离并正确设置idx:
K = size(centroids, 1);
difference=zeros(size(centroids));
idx = zeros(size(X,1), 1); %idx is the vector storing the index of the closest centroid
for e = 1: size(X,1)
difference(1, :) = X(e,:) - centroids(1,:);
min_distance = sum(difference(1,:).^2);
idx(e)=1;
for j = 2:K
difference(j, :) = X(e,:) - centroids(j,:);
distance = sum(difference(j,:).^2);
if (distance<min_distance)
min_distance = distance;
idx(e) = j;
endif
endfor
endfor
idx
此更改后的输出是:
idx =
1
3
2
1
1
1