%模糊c均值聚类 FCM算法的MATLAB代码
%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 算法迭代次数
% 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)<epsm
break
end
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)<epsm
break
end
P0=P;
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文件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 ]
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
没有合适的资源?快使用搜索试试~ 我知道了~
模糊聚类FCM算法和基于GA遗传优化的FCM聚类算法matlab仿真+程序操作视频
共23个文件
m:12个
mat:6个
jpg:4个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 11 下载量 125 浏览量
2022-07-01
01:05:53
上传
评论 5
收藏 3.43MB RAR 举报
温馨提示
注意事项(仿真图预览可参考博主博客里面"同名文章内容"。): 使用matlab2022a或者高版本仿真,运行文件夹中的tops.m或者main.m。运行时注意matlab左侧的当前文件夹窗口必须是当前工程所在路径。 具体操作观看提供的程序操作视频跟着操作。 1.领域:matlab,模糊聚类FCM算法和基于GA遗传优化的FCM聚类算法 2.内容:模糊聚类FCM算法和基于GA遗传优化的FCM聚类算法matlab仿真+程序操作视频 3.用处:用于模糊聚类FCM算法和基于GA遗传优化的FCM聚类算法编程学习 4.指向人群:本硕博等学习教研使用,企事业简单项目方案验证参考
资源推荐
资源详情
资源评论
收起资源包目录
模糊聚类FCM算法和基于GA遗传优化的FCM聚类算法matlab仿真.rar (23个子文件)
Runme2_GAffcm.m 1KB
fuzzycm.mat 10KB
2.jpg 34KB
1.jpg 22KB
fcmdata.mat 10KB
3.jpg 23KB
func
fuzzycm.m 6KB
distfcm.m 928B
xqcutou.m 576B
selection.m 281B
maxrowf.m 240B
crossover.m 323B
fuzzyc.m 4KB
Uconvert.m 235B
mutation.m 351B
code.m 462B
fuzzyc.mat 10KB
Runme1_fcmdata.m 353B
程序操作视频0007.avi 3.86MB
GAffencu.mat 17KB
4.jpg 32KB
GAf.mat 17KB
data.mat 2KB
共 23 条
- 1
我爱C编程
- 粉丝: 1w+
- 资源: 100
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 学校课程软件工程常见10道题目以及答案demo
- javaweb新手开发中常见的目录结构讲解
- 新手小白的git使用的手册入门学习demo
- 基于Java观察者模式的info-express多对多广播通信框架设计源码
- 利用python爬取豆瓣电影评分简单案例demo
- 机器人开发中常见的几道问题以及答案demo
- 基于SpringBoot和layuimini的简洁美观后台权限管理系统设计源码
- 实验报告五六代码.zip
- hdw-dubbo-ui基于vue、element-ui构建开发,实现后台管理前端功能.zip
- (Grafana + Zabbix + ASP.NET Core 2.1 + ECharts + Dapper + Swagger + layuiAdmin)基于角色授权的权限体系.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页