在k中找到最接近的质心意味着聚类

时间:2020-05-02 17:43:07

标签: machine-learning cluster-analysis octave k-means

使用

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中每个点最近的质心。 我正在用八度编程,这是我的代码

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

2 个答案:

答案 0 :(得分:0)

计算时,您需要保持操作数大小的一致性 距离并正确设置idx:

67

进行此更改后,输出为:

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

答案 1 :(得分:0)

使用 Octave 时,您可能会发现 min 函数很有用;)

[minimum_values, minimum_index] = min(k);

您可以为 idx 使用 minimum_index 值,例如:

idx(i) = minimum_index;

因此,您可以将其进一步减少到:

[minimum_values, idx(i)] = min(k);