【问题标题】:how can I determine how many times do I need to iterate in k mean cluster如何确定我需要在 k 均值簇中迭代多少次
【发布时间】:2016-12-24 22:18:42
【问题描述】:

我正在开发用于 kmean 聚类的 Matlab 项目 当我工作时,我发现很难理解 MaxIter 和 Replicates 之间的区别
在我的文件中,我有 100 个土地大小 当我运行我的项目三次时,每次在每个图中,质心和数据点位置都会发生变化。
例如
第一次运行 > 质心位置是 x 5 , y 3
第二次运行 > 质心位置是 x 3, y 2
第三次运行 > 质心位置是 x 2 , y 6
第四次运行 > 质心位置是 x 5 , y 3
第五次运行>质心位置是 x 3,y 2
并且相同的模式不断重复
所以我想知道这是否正常发生,我应该从第一次运行还是第三次运行中获取答案/图表? 正如您从我的代码中看到的那样,我将数据迭代 3000 次,这只是随机数。但是现在我不确定这是否正确,因为我遇到的问题在项目的前三个运行中有所不同 如何确定我需要在 k 均值簇中迭代多少次

Array=csvread('data.csv');
  dataset = Array(:,[1:2]);


  optns = statset('MaxIter',3000);

   [idx,C] = kmeans(dataset,2,'Distance','cityblock',...
       'Options',optns);

  figure;
  plot(dataset(idx==1,1),dataset(idx==1,2),'r.','MarkerSize',20)

【问题讨论】:

  • 聚类问题没有“正确答案”。您可以收到不同的结果,选择正确的结果是您的任务
  • @AVK 除了使用 MaxIter 之外还有其他方法可以告诉它在没有变化时停止迭代吗?

标签: matlab iteration k-means


【解决方案1】:

kmeans.m 包含以下代码:

                % Determine which points moved
            moved = find(nidx ~= previdx);
                % Some code here .....
            if isempty(moved)
                converged = true;
                break;
            end

因此,如果没有变化,它会检查并停止。如果converged为假(即达到MaxIter),它会显示一条警告消息:

            if ~converged
            if reps==1
                warning(message('stats:kmeans:FailedToConverge', maxit));
            else
                warning(message('stats:kmeans:FailedToConvergeRep', maxit, rep));
            end

【讨论】:

    猜你喜欢
    • 2018-09-01
    • 2012-06-19
    • 2013-02-05
    • 2015-12-30
    • 2016-03-16
    • 2017-04-23
    • 2023-03-30
    • 2021-06-18
    • 2014-07-12
    相关资源
    最近更新 更多