📄 fcm.m
字号:
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);
%Xdat=[0.9637,0.2536,0.7415;0.4659,1.0000,0.5815;1.0000,0.7893,1.0000;0.5437,0.9915,0.0000;0.3062,0.6861,0.2364];
C=3;
mfuz=2.5;
epsilon=0.001;
itmax=100;
[M,N] = size(Xdat);
Cmat = fcm_dataInitC(Xdat,C);% 初始化聚类中心(聚类原型模式)
Ct=Cmat;
it=0;
stab = 0;% 迭代中止标记0为继续1为中止
% 迭代求解
while (it<itmax & stab ~=1)
Dmat = fcm_calcD(Xdat,Cmat);% 计算样本与聚类中心(原型模式)间的距离矩阵
Umat = fcm_calcU(mfuz,Dmat);% 更新模糊划分矩阵
Cmat = fcm_calcC(Xdat,C,mfuz,Umat);% 更新聚类中心(原型模式)
Ct=Ct-Cmat;
valJ = fcm_evalJ(Umat,mfuz,Dmat);
a=it+1;
Jmat(a,:)=valJ;
fnorm = norm(Ct,'fro');% 计算是否满足迭代中止条件
if (fnorm<epsilon)
stab = 1;
else
Ct=Cmat;
end
it = it+1;
end
it
Jmat
Cmat
return %% end of function fcm.m
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -