《FCM的MATLAB实现.docx》由会员分享,可在线阅读,更多相关《FCM的MATLAB实现.docx(7页珍藏版)》请在三一办公上搜索。
1、FCM的MATLAB实现m文件1/7: function U,P,Dist,Cluster_Res,Obj_Fcn,iter=fuzzycm(Data,C,plotflag,M,epsm) % 模糊 C 均值聚类 FCM: 从随机初始化划分矩阵开始迭代 % U,P,Dist,Cluster_Res,Obj_Fcn,iter = fuzzycm(Data,C,plotflag,M,epsm) % 输入: % Data: NS 型矩阵,聚类的原始数据,即一组有限的观测样本集, % Data 的每一行为一个观测样本的特征矢量,S 为特征矢量 % 的维数,N 为样本点的个数 % C: 聚类数,1CN
2、% plotflag: 聚类结果 2D/3D 绘图标记,0 表示不绘图,为缺省值 % M: 加权指数,缺省值为 2 % epsm: FCM 算法的迭代停止阈值,缺省值为 1.0e-6 % 输出: % U: CN 型矩阵,FCM 的划分矩阵 % P: CS 型矩阵,FCM 的聚类中心,每一行对应一个聚类原型 % Dist: CN 型矩阵,FCM 各聚类中心到各样本点的距离,聚类中 % 心 i 到样本点 j 的距离为 Dist(i,j) % Cluster_Res: 聚类结果,共 C 行,每一行对应一类 % Obj_Fcn: 目标函数值 % iter: FCM 算法迭代次数 % See also:
3、 fuzzydist maxrowf fcmplot if nargin5 epsm=1.0e-6; end if nargin4 M=2; end if nargin4 | plotflag Obj_Fcn(iter)=sum(sum(Um.*Dist.2); end % FCM 算法迭代停止条件 if norm(U-U0,Inf) 3 res = maxrowf(U); for c = 1:C v = find(res=c); Cluster_Res(c,1:length(v)=v; end end % 绘图 if plotflag fcmplot(Data,U,P,Obj_Fcn); e
4、nd m文件2/7: function U,P,Dist,Cluster_Res,Obj_Fcn,iter=fuzzycm2(Data,P0,plotflag,M,epsm) % 模糊 C 均值聚类 FCM: 从指定初始聚类中心开始迭代 % U,P,Dist,Cluster_Res,Obj_Fcn,iter = fuzzycm2(Data,P0,plotflag,M,epsm) % 输入: Data,plotflag,M,epsm: 见 fuzzycm.m % P0: 初始聚类中心 % 输出: U,P,Dist,Cluster_Res,Obj_Fcn,iter: 见 fuzzycm.m % S
5、ee also: fuzzycm if nargin5 epsm=1.0e-6; end if nargin4 M=2; end if nargin4 | plotflag Obj_Fcn(iter)=sum(sum(Um.*Dist.2); end % FCM 算法迭代停止条件 if norm(P-P0,Inf) 3 res = maxrowf(U); for c = 1:C v = find(res=c); Cluster_Res(c,1:length(v)=v; end end % 绘图 if plotflag fcmplot(Data,U,P,Obj_Fcn); end m文件3/7:
6、 function fcmplot(Data,U,P,Obj_Fcn) % FCM 结果绘图函数 % See also: fuzzycm maxrowf ellipse C,S = size(P); res = maxrowf(U); str = po*x+dv2 figure(2),plot3(P(:,1),P(:,2),P(:,3),rs),hold on for i=1:C v=Data(find(res=i),:); plot3(v(:,1),v(:,2),v(:,3),str(rem(i,12)+1) ellipse(max(v(:,1)-min(v(:,1), . max(v(:,
7、2)-min(v(:,2), . max(v(:,1)+min(v(:,1), . max(v(:,2)+min(v(:,2)/2, . r:,(max(v(:,3)+min(v(:,3)/2) end grid on,title(3D 聚类结果图,fontsize,8),hold off end m文件4/7: function D=fuzzydist(A,B) % 模糊聚类分析: 样本间的距离 % D = fuzzydist(A,B) D=norm(A-B); m文件5/7: function mr=maxrowf(U,c) % 求矩阵 U 每列第 c 大元素所在行,c 的缺省值为 1 %
8、 调用格式: mr = maxrowf(U,c) % See also: addr if nargin2 c=1; end N=size(U,2);mr(1,N)=0; for j=1:N aj=addr(U(:,j),descend); mr(j)=aj(c); end m文件6/7: function ellipse(a,b,center,style,c_3d) % 绘制一个椭圆 % 调用: ellipse(a,b,center,style,c_3d) % 输入: % a: 椭圆的轴长(平行于 x 轴) % b: 椭圆的轴长(平行于 y 轴) % center: 椭圆的中心 x0,y0,缺
9、省值为 0,0 % style: 绘制的线型和颜色,缺省值为实线蓝色 % c_3d: 椭圆的中心在 3D 空间中的 z 轴坐标,可缺省 if nargin4 style=b; end if nargin4 plot3(x,y,ones(1,360)*c_3d,style) else plot(x,y,style) end m文件7/7: function f = addr(a,strsort) % 返回向量升序或降序排列后各分量在原始向量中的索引 % 函数调用:f = addr(a,strsort) % strsort: ascend or descend % default is ascend % - example - % addr( 4 5 1 2 ) returns ans: % 3 4 1 2 if nargin=1 strsort=ascend; end sa=sort(a); ca=a; la=length(a);f(la)=0; for i=1:la f(i)=find(ca=sa(i),1); ca(f(i)=NaN; end if strcmp(strsort,descend) f=fliplr(f); end