-1

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

14 iterations, total sum of distances = 731.224


  iter   phase       num             sum

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

使用这些数据我想画这样的东西

4

2 回答 2

0

如果itersum被存储为变量,您可以简单地调用

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

或者,更简单

plot(sum)

编辑

我不熟悉该功能,但为了保存为工作区变量,我将执行以下操作:

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

然后继续我上面提到的。

于 2013-08-13T08:40:16.187 回答
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
于 2013-08-13T13:51:32.707 回答