模糊c均值聚类 FCM算法的MATLAB代码
更新时间:2024-06-05 19:27:01 阅读量: 综合文库 文档下载
- 模糊c均值聚类推荐度:
- 相关推荐
模糊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 % 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 算法迭代次数 % See also: fuzzydist maxrowf fcmplot if nargin<5 epsm=1.0e-6; end if nargin<4 M=2; end if nargin<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 的迭代算法 while true % 迭代计数器 iter=iter+1; % 计算或更新聚类中心 P Um=U0.^M; P=Um*Data./(ones(S,1)*sum(Um'))'; % 更新划分矩阵 U for i=1:C for j=1:N Dist(i,j)=fuzzydist(P(i,:),Data(j,:)); end end U=1./(Dist.^m.*(ones(C,1)*sum(Dist.^(-m)))); % 目标函数值: 类内加权平方误差和 if nargout>4 | plotflag Obj_Fcn(iter)=sum(sum(Um.*Dist.^2)); end % FCM 算法迭代停止条件 if norm(U-U0,Inf) U0=U; end % 聚类结果 if nargout > 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文件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 % See also: fuzzycm if nargin<5 epsm=1.0e-6; end if nargin<4 M=2; end if nargin<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 的迭代算法 while true % 迭代计数器 iter=iter+1; % 计算或更新划分矩阵 U for i=1:C for j=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)*sum(Um'))'; % 目标函数值: 类内加权平方误差和 if nargout>4 | plotflag Obj_Fcn(iter)=sum(sum(Um.*Dist.^2)); end % FCM 算法迭代停止条件 if norm(P-P0,Inf) % 聚类结果 if nargout > 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: function fcmplot(Data,U,P,Obj_Fcn) % FCM 结果绘图函数 % See also: fuzzycm maxrowf ellipse [C,S] = size(P); res = maxrowf(U); str = 'po*x+d^v><.h'; % 目标函数绘图 figure(1),plot(Obj_Fcn) title('目标函数值变化曲线','fontsize',8) % 2D 绘图 if S==2 figure(2),plot(P(:,1),P(:,2),'rs'),hold on for i=1:C v=Data(find(res==i),:); plot(v(:,1),v(:,2),str(rem(i,12)+1)) ellipse(max(v(:,1))-min(v(:,1)), ... max(v(:,2))-min(v(:,2)), ... [max(v(:,1))+min(v(:,1)), ... max(v(:,2))+min(v(:,2))]/2,'r:') end grid on,title('2D 聚类结果图','fontsize',8),hold off end % 3D 绘图 if S>2 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(:,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 % 调用格式: mr = maxrowf(U,c) % See also: addr if nargin<2 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],缺省值为 [0,0] % style: 绘制的线型和颜色,缺省值为实线蓝色 % c_3d: 椭圆的中心在 3D 空间中的 z 轴坐标,可缺省 if nargin<4 style='b'; end if nargin<3 | isempty(center) center=[0,0]; end t=1:360; x=a/2*cosd(t)+center(1); y=b/2*sind(t)+center(2); if nargin>4 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 ]
正在阅读:
公办学校办学审批10-23
马克思试题(1)10-25
股权投资优秀建议书04-12
分析如何加强当代新闻记者的职业道德建设06-25
空调工程调试方案05-30
练习题-关系代数表达式12-08
2014年高考数学理科(高考真题+模拟新题)分类汇编:G单元 立体几04-06
如何把自己培养成社会精英骨干03-08
flex&java数据类型对照表03-28
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 均值
- 算法
- 模糊
- 代码
- MATLAB
- FCM
- 地下室施工与支模架方案
- 成语练习题
- 七年级生物双基试题
- 2018北京高级经济师考题回忆
- 长沙市系统集成服务行业企业名录2018版1069家 - 图文
- 《设计色彩》考试复习题
- 房地产法教学大纲
- 飞花令:带“雪”字的诗句
- 计划生育政策调整对人口数量、结构及其影响的研究 - 图文
- 教不在深 仿写
- 当代世界经济与政治教案汇总
- 作业3.2.4
- 数字电路及数字系统设计(1-4)
- 云南省保山市高一生物课堂练习2(无答案)
- 奥鹏南开16春学期《数学的思维方式(尔雅)》在线作业
- 温岭大溪皇家花园项目部质量、安全、文明规章制度
- 2019年共青团知识竞赛题库及答案(完整版)
- 脚手架搭设的技术要求、允许偏差与检验方法
- 影评的格式和范文
- 孔子拜师1 - 图文