我对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这样的东西。
答案 0 :(得分:0)
如果将iter
和sum
存储为变量,您只需调用
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