为什么 k-means 每次都聚类不同的结果?

why do k-means clustering different results everytime?

我正在使用 k 均值聚类来分割视网膜图像。然而,每次当我 运行 我的代码分割对同一图像产生不同的结果。这种变化的原因是什么?以下是同一图像的三个分割结果。 下面是用于此分段的代码。

idx = kmeans(double(imreslt1(:)),2);              
classimage =  reshape(idx, size(imreslt1));

               minD = min( classimage (:));
               maxD = max( classimage  (:));
               g = (double(classimage  ) - minD) ./ (maxD - minD);

imshow(g);

如果您阅读 kmeans 函数的 MATLAB 帮助文件,您会看到 k-means 聚类算法的初始点是根据 k-means++ 算法随机选择的。为了使其可重现,您可以按如下方式传入自己的初始点:

kmeans(...,'Start',[random_points_matrix])

或者,您可以尝试使用以下方法为 MATLAB 内部随机数生成器设定种子:

rng(seed); % where seed is some constant you choose
idx = kmean(...);

但是,我不清楚 kmean 函数的内部结构,所以我不能保证这一定会产生可重现的结果。

这是 kmeans 的初始化问题,因为当 kmeans 启动时,它会选择随机初始点来聚类数据。然后 matlab 选择 k 个随机点并计算数据中的点到这些位置的距离,并找到新的质心以进一步最小化距离。所以由于这些随机的初始点,你会得到质心位置的不同结果,但答案是相似的。