- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
模糊数学在聚类分析中的作用(matlab代码).
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
文档评论(0)