在k中找到最接近的质心表示聚类

问题描述 投票:0回答:1

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的前三个条目

machine-learning cluster-analysis octave k-means
1个回答
0
投票

计算时,操作数的大小必须保持一致距离并正确设置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
© www.soinside.com 2019 - 2024. All rights reserved.