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

用MATLAB绘制K-均值聚类中的迭代,matlab,plot,iteration,k-means,Matlab,Plot,Iteration,K Means,我对kmean有问题。我想画出CostFunction的值(“sum”在下面显示的输出中)与使用kmean算法获得的迭代(iter”)的比较。通过更改输入选项,您可以获得以下信息: 14 iterations, total sum of distances = 731.224 iter phase num sum 1 1 604 847.577 2 1 56 8

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

14 iterations, total sum of distances = 731.224


  iter   phase       num             sum

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

使用这些数据,我想画一些类似的东西。

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

plot( iter , sum , 'r' , 'LineWidth' , 1.5 )
或者,更简单一些

plot(sum)
编辑

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

[IDX,C,sumd,D] = kmeans(X,k)
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

然后继续我上面提到的内容。

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

[IDX,C,sumd,D] = kmeans(X,k)
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

请发布到目前为止您尝试过的内容。因此,用户不是来为您编写代码的,而是来帮助您完成已经实现的功能。@alitahori您是否在使用内置的matlab函数kmeans?如果是这样,你能发布使用方法吗?是的,我使用内置的matlab函数。只有使用是真正容易和快速的。。!你为什么要问???@Alitahori,这样我就不用猜你展示的东西都是从哪里来的。。。请参阅下面我的答案。不幸的是,工作区中没有此变量。。。我只使用默认函数im MATLAB。kmean算法@阿利塔霍里:我编辑了我的答案,检查它是否符合你的需要。那么在这个“图(iter,sum,'r','LineWidth',1.5)”中的'iter'怎么样?我们可以通过从kmeans函数中得到“sumd”来生成“sum”,那么“iter”呢?谢谢你的代码,但我不明白。我是否必须添加此代码??似乎不是。。!输入数据在哪里?我很困惑…这是我收到的错误:“???未定义的函数或变量‘H’”。在我定义它之后,我收到:“???未定义的函数或变量‘nbin’”@请看我的变化。您应该能够或多或少地使用编写的代码。只需在指定位置插入用于执行kmeans的行,并在脚本末尾添加绘图函数。@alitahori顺便说一句,我不建议您使用“sum”作为变量名称,因为它与内置函数的名称冲突
sum
。我改用变量名
sm
。如何增加迭代次数??(我认为是“复制”,但我不确定)