预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

模糊c均值聚类FCM算法的MATLAB代码 我做毕业论文时需要模糊C-均值聚类,找了好长时间才找到这个,分享给大家: 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:N×S型矩阵,聚类的原始数据,即一组有限的观测样本集, %Data的每一行为一个观测样本的特征矢量,S为特征矢量 %的维数,N为样本点的个数 %C:聚类数,1<C<N %plotflag:聚类结果2D/3D绘图标记,0表示不绘图,为缺省值 %M:加权指数,缺省值为2 %epsm:FCM算法的迭代停止阈值,缺省值为1.0e-6 %输出: %U:C×N型矩阵,FCM的划分矩阵 %P:C×S型矩阵,FCM的聚类中心,每一行对应一个聚类原型 %Dist:C×N型矩阵,FCM各聚类中心到各样本点的距离,聚类中 %心i到样本点j的距离为Dist(i,j) %Cluster_Res:聚类结果,共C行,每一行对应一类 %Obj_Fcn:目标函数值 %iter:FCM算法迭代次数 %Seealso:fuzzydistmaxrowffcmplot ifnargin<5 epsm=1.0e-6; end ifnargin<4 M=2; end ifnargin<3 plotflag=0; end [N,S]=size(Data);m=2/(M-1);iter=0; Dist(C,N)=0;U(C,N)=0;P(C,S)=0; %随机初始化划分矩阵 U0=rand(C,N); U0=U0./(ones(C,1)*sum(U0)); %FCM的迭代算法 whiletrue %迭代计数器 iter=iter+1; %计算或更新聚类中心P Um=U0.^M; P=Um*Data./(ones(S,1)*sum(Um'))'; %更新划分矩阵U fori=1:C forj=1:N Dist(i,j)=fuzzydist(P(i,:),Data(j,:)); end end U=1./(Dist.^m.*(ones(C,1)*sum(Dist.^(-m)))); %目标函数值:类内加权平方误差和 ifnargout>4|plotflag Obj_Fcn(iter)=sum(sum(Um.*Dist.^2)); end %FCM算法迭代停止条件 ifnorm(U-U0,Inf)<epsm break end U0=U; end %聚类结果 ifnargout>3 res=maxrowf(U); forc=1:C v=find(res==c); Cluster_Res(c,1:length(v))=v; end end %绘图 ifplotflag fcmplot(Data,U,P,Obj_Fcn); end 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 %Seealso:fuzzycm ifnargin<5 epsm=1.0e-6; end ifnargin<4 M=2; end ifnargin<3 plotflag=0; end [N,S]=size(Data);m=2/(M-1);iter=0; C=size(P0,1);Dist(C,N)=0;U(C,N)=0;P(C,S)=0; %FCM的迭代算法 whiletrue %迭代计数器 iter=iter+1; %计算或更新划分矩阵U fori=1:C forj=1:N Dist(i,j)=fuzzydist(P0(i,:),Data(j,:)); end end U=1./(Dist.^m.*(ones(C,1)*sum(Dist.^(-m)))); %更新聚类中心P Um=U.^M; P=Um*Data./(ones(S,1)*s