subfcm.m

来自「该算法是结合减法聚类与FCM聚类算法融合的远代码。算法通过融合这两种算法」· M 代码 · 共 67 行

M
67
字号
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 + =
减小字号Ctrl + -
显示快捷键?