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

时间:2017-07-10 04:53:56

标签: matlab k-means image-segmentation

我正在使用k-means聚类来分割视网膜图像。但是,每当我运行我的代码分段时,同一图像的结果都不同。这种变化的原因是什么?以下是同一图像的三个分割结果。 Segmentation result 1 Segmentation result 2 Segmentation 3 以下是用于此分段的代码。

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

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

imshow(g);

2 个答案:

答案 0 :(得分:1)

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

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

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

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

但是,我对kmean函数的内部结构并不清楚,因此我无法保证这必然会产生可重现的结果。

答案 1 :(得分:1)

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