⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fcm.m

📁 FCM算法的matlab实现
💻 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 + -