用MATLAB绘制K均值聚类中的迭代

时间:2013-08-13 05:10:01

标签: matlab plot iteration k-means

我对kmean有疑问。我想绘制CostFunction(下面显示的输出中的“sum”)与使用iter算法获得的迭代(“kmean”)的值。通过更改输入选项,您可以获得:

14 iterations, total sum of distances = 731.224


  iter   phase       num             sum

  1      1       604         847.577
  2      1        56         818.135
....

使用这些数据我想绘制像this这样的东西。

2 个答案:

答案 0 :(得分:0)

如果将itersum存储为变量,您只需调用

即可
plot( iter , sum , 'r' , 'LineWidth' , 1.5 )

或,更简单

plot(sum)

修改

我不熟悉这个函数,但是对于保存为工作空间变量,我会按如下方式进行:

[IDX,C,sumd,D] = kmeans(X,k)

然后继续我上面提到的。

答案 1 :(得分:0)

由于迭代迭代进度显然没有存储在您可以查询的某个对象中,因此您必须收集在命令行显示的信息。一种方法如下:

diary temp
% ....
% execute kmeans here, something like this:
% km = kmeans(H',nbin,'Display','iter');
% ....
diary off

% now extract the line by line result from the diary file called "temp"
fid=fopen('temp');
dat=textscan(fid,'%s');
fclose(fid);
delete temp

dat=dat{1};
i1=find(~cellfun('isempty',strfind(dat,'sum')));
ie=find(~cellfun('isempty',strfind(dat,'iterations')));
i1=i1(1)+1;
Nd=str2num(dat{ie(1)-1});
ie=Nd*4+i1-1;
dat=reshape(str2num(strvcat(dat{i1:ie})),4,Nd)';

iter = dat(:,1) % <-- iterations
sm = dat(:,4)   % <-- sum

可能有一些方法可以简化阅读diary文件,但这对我有用。

修改

在尝试运行函数之前,查看文档总是明智的:

doc kmeans