fcm.m
上传用户:jm_zfg
上传日期:2017-05-03
资源大小:1k
文件大小:1k
源码类别:

弱点检测代码

开发平台:

Matlab

  1. %程序模糊聚类%
  2. %模糊 C-平均(FCM)算法%
  3. %N:输入样本数,dimen:样本维度%
  4. %X:输入样本(N*dimen)%
  5. %cluster:群数, m:指数型权重(1<r)%
  6. %tolerance:误差临界值%
  7. %U:分割矩阵(大小为cluster*N)%
  8. % clear; 
  9. % clc;
  10. figure;
  11.   X=rand(200,2);
  12. [N,dimen]=size(X);
  13. plot(X(:,1),X(:,2),'*'), 
  14. % axis([-0.1 1.1 -0.1 1.1])
  15. hold on
  16. %步骤一:设定一些初值及初始分割矩阵%
  17. cluster=5; r=2; tolerance=1e-5; cycle=500;
  18. U=rand(cluster,N);
  19. ss=sum(U);
  20. U_new=U./ss(ones(cluster,1),:);    %初始模糊分割矩阵
  21. for L=1:cycle
  22. %步骤二:计算模糊聚类中心%
  23.  U=U_new;
  24.  Uexp=U.^r;
  25.  C=Uexp*X./( (ones(dimen,1)*sum(Uexp'))' );    %新群心的值
  26.  plot(C(:,1),C(:,2),'ro')
  27. %步骤三:计算新的分割矩阵%
  28.  for k=1:cluster
  29.    dist(k,:)=sqrt(sum( ((X- ones(N,1)*C(k,:) ).^2)' )); 
  30.  end
  31.  temp=dist.^(-2/(r-1));               %计算新的分割矩阵(1<r)
  32.  U_new=temp./(ones(cluster,1)*sum(temp));
  33. %步骤四:计算成本函数值%
  34. cost(L)=sum(sum((dist.^2).*Uexp));    %成本函数
  35. fprintf('递归循环次数 = %d, 成本函数值 = %fn', L, cost(L));
  36.  if L>1,
  37.    if abs(cost(L)-cost(L-1))<tolerance
  38.      break;
  39.    end,
  40.  end
  41. end
  42. hold off
  43. disp('最后群心的值 ='); disp(C)