📄 subfcm.m
字号:
function [center,U,obj_fcn]=subfcm(data,C,cluster_n,options)
if nargin~=3 & nargin~=4
error('Too many or too few input arguments!');
end
data_n=size(data,1);
in_n=size(data,2);
C_n=size(C,1);%最大聚类数目
if cluster_n > C_n
error('The cluster number should be equal or smaller than C_n');
end
%默认参数
default_options=[2;%划分矩阵U系数
100;%最大迭代次数
1e-5;%迭代停止的最小增量准则
1];%迭代过程的信息显示
if nargin==3,
options=default_options;
else
if length(options)<4,
tmp=default_options;
tmp(1:length(options))=options;
options=tmp;
end
nan_index=find(isnan(options)==1);
options(nan_index)=default_options(nan_index);
if options(1)<=1,
error('The exponent should be greater than 1!');
end
end
expo=options(1);
max_iter=options(2);
min_impro=options(3);
display=options(4);
obj_fcn=zeros(max_iter,1);
%初始化模糊划分
center=C(1:cluster_n,:);
dist=distfcm(center,data);%计算欧式距离
tmp=dist.^(-2/(expo-1));
U=tmp./(ones(cluster_n,1)*sum(tmp));
%主循环
for i=1:max_iter,
[U,center,obj_fcn(i)]=stepsubfcm(data,U,cluster_n,expo);
if display,
fprintf('Iteration count=%d,obj.fcn=%f\n',i,obj_fcn(i));
end
if i>1,
if abs(obj_fcn(i)-obj_fcn(i-1))<min_impro,break;end,
end
end
iter_n=i;
obj_fcn(iter_n+1;max_iter)=[];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -