2016-08-18 26 views
0

我正在为kmean聚类的Matlab项目工作 我在工作时发现了解我的文件I中的MaxIter和复制
之间的差异有100个地块大小 当我运行我的项目三次时,我得到的差异情节每一次绘图的质心和数据点位置的变化。
例如
首先运行>质心位置为x 5,y 3的
第二运行>质心位置是X 3,Y 2
第三运行>质心位置是X 2,Y 6
第四运行>质心位置为x 5,y 3的
第五运行>质心位置是X 3,Y 2
和相同的模式不断重复
所以我想知道这是正常情况发生我应该只取答案/图表从所述第一运行还是第三次运行?你可以从我的代码中看到我重复数据3000次,这只是随机数。但是现在我不知道如果正确由于TI,我得到了它的不同情节项目 前三来看,我怎么能确定有多少次,我需要在K迭代均值聚类如何确定需要在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) 
问题
+0

聚类问题没有“正确答案”。你可以得到不同的结果,这是你的任务,选择正确的一个 – AVK

+0

@AVK除了使用MaxIter有另一种方法,我可以告诉它停止迭代时没有改变? – mozaJ

回答

0

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