【问题标题】:Finding the closest centroids in a k means clustering在 k 中找到最近的质心意味着聚类
【发布时间】:2020-08-17 04:45:58
【问题描述】:

与

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

【问题讨论】:

  • 同样的问题:x 和 X 不是同一个变量。您没有定义difference 的大小。 idx 应该是列向量 6x1 ,怎么变成矩阵 3x2 ?检查idx(e) = centroids(j)两边的索引;可能您的意图是 idx(e) = j 而您忘记在外循环上设置 idx(e)=1?

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


【解决方案1】:

您在计算时需要保持操作数的大小一致 距离并正确设置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

【讨论】:

  • 非常感谢!我在您回答前几分钟就发现了错误,并来到这里删除我的问题。非常感谢您的回答。
【解决方案2】:

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

[minimum_values, minimum_index] = min(k);

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

idx(i) = minimum_index;

因此,您可以将其进一步简化为:

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

【讨论】:

    猜你喜欢
    • 2021-11-08
    • 2021-02-14
    • 2021-07-11
    • 2018-01-22
    • 2018-07-02
    • 2013-05-17
    • 2020-09-06
    • 2019-04-23
    • 2015-02-19
    相关资源
    最近更新 更多