fcm.m
上传用户:jm_zfg
上传日期:2017-05-03
资源大小:1k
文件大小:1k
- %程序模糊聚类%
- %模糊 C-平均(FCM)算法%
- %N:输入样本数,dimen:样本维度%
- %X:输入样本(N*dimen)%
- %cluster:群数, m:指数型权重(1<r)%
- %tolerance:误差临界值%
- %U:分割矩阵(大小为cluster*N)%
- % clear;
- % clc;
- figure;
- X=rand(200,2);
- [N,dimen]=size(X);
- plot(X(:,1),X(:,2),'*'),
- % axis([-0.1 1.1 -0.1 1.1])
- hold on
- %步骤一:设定一些初值及初始分割矩阵%
- cluster=5; r=2; tolerance=1e-5; cycle=500;
- U=rand(cluster,N);
- ss=sum(U);
- U_new=U./ss(ones(cluster,1),:); %初始模糊分割矩阵
- for L=1:cycle
- %步骤二:计算模糊聚类中心%
- U=U_new;
- Uexp=U.^r;
- C=Uexp*X./( (ones(dimen,1)*sum(Uexp'))' ); %新群心的值
- plot(C(:,1),C(:,2),'ro')
- %步骤三:计算新的分割矩阵%
- for k=1:cluster
- dist(k,:)=sqrt(sum( ((X- ones(N,1)*C(k,:) ).^2)' ));
- end
- temp=dist.^(-2/(r-1)); %计算新的分割矩阵(1<r)
- U_new=temp./(ones(cluster,1)*sum(temp));
- %步骤四:计算成本函数值%
- cost(L)=sum(sum((dist.^2).*Uexp)); %成本函数
- fprintf('递归循环次数 = %d, 成本函数值 = %fn', L, cost(L));
- if L>1,
- if abs(cost(L)-cost(L-1))<tolerance
- break;
- end,
- end
- end
- hold off
- disp('最后群心的值 ='); disp(C)