为什么 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 个随机点并计算数据中的点到这些位置的距离,并找到新的质心以进一步最小化距离。所以由于这些随机的初始点,你会得到质心位置的不同结果,但答案是相似的。
我正在使用 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 个随机点并计算数据中的点到这些位置的距离,并找到新的质心以进一步最小化距离。所以由于这些随机的初始点,你会得到质心位置的不同结果,但答案是相似的。