模糊数学在聚类分析中的作用(matlab代码)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

function [M,N] = Example8_11

X=[1.8 2.1 3.2 2.2 2.5 2.8 1.9 2.0;

95 99 101 103 98 102 120 130;

0.15 0.21 0.18 0.17 0.16 0.20 0.09 0.11]; X=X'

%X=[80 10 6 2;50 1 6 4;90 6 4 6;40 5 7 3;10 1 2 4]

[M,N]=fuzzy_jlfx(4,5,X);

end

%%

function [M,N]=fuzzy_jlfx(bzh,fa,X)%得到聚类结果

[X]=F_JlSjBzh(bzh,X);%数据标准化

[R]=F_JlR(fa,X);%建立相似矩阵

[A]=fuzzy_cdbb(R);%得到传递闭包矩阵

[Alamd]=fuzzy_lamdjjz(A);%得到lamdf截矩阵从而得到聚类结果[M,N]=F_JlDtjl(R);%动态聚类并画出聚类图

%%

function [M,N]=F_JlDtjl(R)

%clc;

[A]=fuzzy_cdbb(R);

U=unique(A);

L=length(U);

M=1:L;

for i=L-1:-1:1

[m,n]=find(A==U(i));

N{i,1}=n;

N{i,2}=m;

A(m(1),:)=0;

mm=unique(m);

N{i,3}=mm;

len=length(find(m==mm(1)));

depth=length(find(m==mm(2)));

index1=find(M==mm(1));

MM=[M(1:index1-1),M(index1+depth:L)]; %

index2=find(MM==mm(2));

M=M(index1:index1+depth-1);

M=[MM(1:index2-1),M,MM(index2:end)];

end

M=[1:L;M;ones(1,L)];

h=(max(U)-min(U))/L;

figure

text(L,1,sprintf('%d',M(2,L)));

text(L+1,1-h,sprintf('%d',L));

text(0,1,sprintf('%3.2f',1));

text(0,(1+min(U))/2,sprintf('%3.2f',(1+min(U))/2));

text(0,min(U),sprintf('%3.2f',min(U)));

hold on

for i=L-1:-1:1

m=N{i,2};

n=N{i,1};

mm=N{i,3};

k=find(M(2,:)==mm(1));

l=find(M(2,:)==mm(2));

x1=M(1,k);

y1=M(3,k);

x2=M(1,l);

y2=M(3,l);

x=[x1,x1,x2,x2];

M(3,[k,l])=U(i);

M(1,[k,l])=sum(M(1,[k,l]))/length(M(1,[k,l]));

y=[y1,U(i),U(i),y2];

plot(x,y);

text(i,1,sprintf('%d',M(2,i)));

text(M(1,k(1)),U(i)+h*0.1,sprintf('%3.2f',U(i)));

text(L+1,1-i*h-h,sprintf('%d',L-i));

end

axis([0 L+1 min(U) max(U)])

axis off

hold off

end

end

%%

function[X]=F_JlSjBzh(cs,X)%定义函数

%模糊聚类分析数据标准化变换: [X]=F_JlSjBzh(cs,X)

%X,数据矩阵

%cs=0,不变换;cs=1,标准差变换;cs=2,极差变换;cs=其它,最大值规格化if(cs==0)return;end

[n,m]=size(X);%获得矩阵的行列数

if(cs==1)%平移?标准差变换

for(k=1:m)xk=0;

for(i=1:n)xk=xk+X(i,k);end

xk=xk/n;sk=0;

for(i=1:n)sk=sk+(X(i,k)-xk)^2;end

sk=sqrt(sk/n);

for(i=1:n)X(i,k)=(X(i,k)-xk)/sk;end

end

elseif(cs==2)%平移?极差变换

for(k=1:m)xmin=X(1,k);xmax=X(1,k);

for(i=1:n)

if(xmin>X(i,k))xmin=X(i,k);end

if(xmax

end

for(i=1:n)X(i,k)=(X(i,k)-xmin)/(xmax-xmin);end end

else%最大值规格化

A=max(X);

for(i=1:m)

X(:,i)=X(:,i)/A(i);

相关文档
最新文档