📄 fcm.asv
字号:
function [Umat,Cmat,it,valJ] = fcm(Xdat,C,mfuz,epsilon,itmax);
% function [Umat,Cmat,it,valJ] = fcm(Xdat,K,mfuz,epsilon,itmax);
% 模糊聚类主函数%
% Xdat :原数据集,大小为(M,N)
% C :聚类数目
% M:数据的个数,N:数据的维数
% mfuz :加权指数m
% Umat :模糊划分矩阵,大小为(C,M)
% Cmat :聚类中心矩阵,大小为(C,N)
% Dmat :距离矩阵,大小为(C,M)
% epsilon :运算中止条件
% itmax :最大迭代次数
% it :迭代次数
load iris.txt;
Xdat = iris(:,3:6);
C=3;
mfuz=2;
epsilon=0.001;
itmax=100;
[M,N] = size(Xdat);
% initialization of Cmat using random values
Cmat = fcm_dataInitC(Xdat,C);
Ct=Cmat;
it=1;
stab = 0;
while (it<itmax & stab ~=1)
% compute matrix of distance
Dmat = fcm_calcD(Xdat,Cmat);
% compute initial Umat
Umat = fcm_calcU(mfuz,Dmat);
Cmat = fcm_calcC(Xdat,C,mfuz,Umat);
Ct=Ct-Cmat;
%Ut = Umat;
%it=1; stab = 0;
%while (it<itmax & stab ~=1)
% compute Cmat, the matrix of centroids, from Xdat and Ut
% Cmat = fcm_calcC(Xdat,K,mfuz,Ut);
% Compute Dmat, the matrix of distances (euclidian)
% Dmat = fcm_calcD(Xdat,Cmat);
% update Umat, the fuzzy partition matrix
% Umat = fcm_calcU(mfuz,Dmat);
% Calculate difference between Ut and Umat and put it in Ut
%Ut = Ut-Umat;
%fnorm = norm(Ut,'fro');
%if (fnorm<epsilon) stab = 1; else Ut = Umat; end
%it = it+1;
end
%valJ = fcm_evalJ(Umat,mfuz,Dmat);
return %% end of function fcm.m
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -