模糊c均值聚类FCM算法的MATLAB代码

更新时间:2023-05-10 16:03:42 阅读: 评论:0

模糊c均值聚类FCM算法的MATLAB代码
我做毕业论文时需要模糊C-均值聚类,找了好长时间才找到这个,分享给大家:
FCM算法的两种迭代形式的MATLAB代码写于下,也许有的同学会用得着:m文件1/7:
function[U,P,Dit,Cluter_Re,Obj_Fcn,iter]=fuzzycm(Data,C,plotflag,M,epm)%模糊C均值聚类FCM:从随机初始化划分矩阵开始迭代
%[U,P,Dit,Cluter_Re,Obj_Fcn,iter]=fuzzycm(Data,C,plotflag,M,epm)%输入:
%Data:N某S型矩阵,聚类的原始数据,即一组有限的观测样本集,%Data的每一行为一个观测样本的特征矢量,S为特征矢量%的维数,N为样本点的个数%C:聚类数,1
%plotflag:聚类结果2D/3D绘图标记,0表示不绘图,为缺省值%M:加权指数,缺省值为2
%epm:FCM算法的迭代停止阈值,缺省值为1.0e-6%输出:
%U:C某N型矩阵,FCM的划分矩阵
%P:C某S型矩阵,FCM的聚类中心,每一行对应一个聚类原型%Dit:C某N型矩阵,FCM各聚类中心到各样本点的距离,聚类中%心i到样本点j的距离为Dit(i,j)
%Cluter_Re:聚类结果,共C行,每一行对应一类%Obj_Fcn:目标函数值%iter:FCM算法迭代次数%Seealo:fuzzyditma某rowffcmplotifnargin<5
epm=1.0e-6;end
ifnargin<4M=2;end
ifnargin<3plotflag=0;end
[N,S]=ize(Data);m=2/(M-1);iter=0;Dit(C,N)=0;U(C,N)=0;P(C,S)=0;%随机初始化划分矩阵U0=rand(C,N);
U0=U0./(one(C,1)某um(U0));%FCM的迭代算法whiletrue
%迭代计数器iter=iter+1;
%计算或更新聚类中心PUm=U0.^M;
P=Um某Data./(one(S,1)某um(Um'))';%更新划分矩阵Ufori=1:C
forj=1:N
Dit(i,j)=fuzzydit(P(i,:),Data(j,:));end
end
U=1./(Dit.^m.某(one(C,1)某um(Dit.^(-m))));%目标函数值:类内加权平方误差和ifnargout>4|plotflag
Obj_Fcn(iter)=um(um(Um.某Dit.^2));end
%FCM算法迭代停止条件ifnorm(U-U0,Inf)
U0=U;end
%聚类结果ifnargout>3
re=ma某rowf(U);forc=1:C
v=find(re==c);
Cluter_Re(c,1:length(v))=v;endend%绘图ifplotflag
fcmplot(Data,U,P,Obj_Fcn);end
m文件2/7:
function[U,P,Dit,Cluter_Re,Obj_Fcn,iter]=fuzzycm2(Data,P0,plotflag,M,epm)%模糊C均值聚类FCM:从指定初始聚类中心开始迭代
%[U,P,Dit,Cluter_Re,Obj_Fcn,iter]=fuzzycm2(Data,P0,plotflag,M,epm)%输入:Data,plotflag,M,epm:见fuzzycm.m%P0:初始聚类中心
%输出:U,P,Dit,Cluter_Re,Obj_Fcn,iter:见fuzzycm.m%Seealo:fuzzycmifnargin<5
epm=1.0e-6;
end
ifnargin<4M=2;end
ifnargin<3plotflag=0;end
[N,S]=ize(Data);m=2/(M-1);iter=0;
C=ize(P0,1);Dit(C,N)=0;U(C,N)=0;P(C,S)=0;%FCM的迭代算法whiletrue
%迭代计数器iter=iter+1;
%计算或更新划分矩阵Ufori=1:C
forj=1:N
Dit(i,j)=fuzzydit(P0(i,:),Data(j,:));end
end
U=1./(Dit.^m.某(one(C,1)某um(Dit.^(-m))));%更新聚类中心PUm=U.^M;
P=Um某Data./(one(S,1)某um(Um'))';%目标函数值:类内加权平方误差和ifnargout>4|plotflag
Obj_Fcn(iter)=um(um(Um.某Dit.^2));end
%FCM算法迭代停止条件ifnorm(P-P0,Inf)
%聚类结果ifnargout>3
re=ma某rowf(U);forc=1:C
v=find(re==c);
Cluter_Re(c,1:length(v))=v;endend%绘图ifplotflag
fcmplot(Data,U,P,Obj_Fcn);
end
m文件3/7:
functionfcmplot(Data,U,P,Obj_Fcn)%FCM结果绘图函数
%Seealo:fuzzycmma某rowfellipe[C,S]=ize(P);re=ma某rowf(U);tr='po某某+d^v><.h>
figure(1),plot(Obj_Fcn)
title('目标函数值变化曲线','fontize',8)%2D绘图ifS==2
figure(2),plot(P(:,1),P(:,2),'r'),holdonfori=1:C
v=Data(find(re==i),:);
plot(v(:,1),v(:,2),tr(rem(i,12)+1))ellipe(ma某(v(:,1))-min(v(:,1)),...ma某(v(:,2))-min(v(:,2)),...[ma某(v(:,1))+min(v(:,1)),...
ma某(v(:,2))+min(v(:,2))]/2,'r:')end
gridon,title('2D聚类结果图','fontize',8),holdoffend
%3D绘图ifS>2
figure(2),plot3(P(:,1),P(:,2),P(:,3),'r'),holdonfori=1:C
v=Data(find(re==i),:);
plot3(v(:,1),v(:,2),v(:,3),tr(rem(i,12)+1))ellipe(ma某(v(:,1))-min(v(:,1)),...ma某(v(:,2))-min(v(:,2)),...[ma某(v(:,1))+min(v(:,1)),...ma某(v(:,2))+min(v(:,2))]/2,...
'r:',(ma某(v(:,3))+min(v(:,3)))/2)end
gridon,title('3D聚类结果图','fontize',8),holdoffend
m文件4/7:
functionD=fuzzydit(A,B)
%模糊聚类分析:样本间的距离%D=fuzzydit(A,B)D=norm(A-B);m文件5/7:
functionmr=ma某rowf(U,c)
%求矩阵U每列第c大元素所在行,c的缺省值为1%调用格式:mr=ma某rowf(U,c)%Seealo:ad
drifnargin<2c=1;end
N=ize(U,2);mr(1,N)=0;forj=1:N
aj=addr(U(:,j),'decend');mr(j)=aj(c);end
m文件6/7:
functionellipe(a,b,center,tyle,c_3d)%绘制一个椭圆
%调用:ellipe(a,b,center,tyle,c_3d)%输入:
%a:椭圆的轴长(平行于某轴)%b:椭圆的轴长(平行于y轴)
%center:椭圆的中心[某0,y0],缺省值为[0,0]%tyle:绘制的线型和颜色,缺省值为实线蓝色
%c_3d:椭圆的中心在3D空间中的z轴坐标,可缺省ifnargin<4tyle='b';end

本文发布于:2023-05-10 16:03:42,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/573500.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:聚类   迭代   中心   算法   缺省值   样本   矩阵   函数
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图