matlab模糊聚类程序.docx
《matlab模糊聚类程序.docx》由会员分享,可在线阅读,更多相关《matlab模糊聚类程序.docx(15页珍藏版)》请在冰点文库上搜索。
matlab模糊聚类程序
3•数据标准化
(1)数据矩阵
设论域U二伪必匹,%庞,沧,冷必压必0,为1必2}为被分类的对象,每个
对象又由指标Y={%,%,%,%,%,丫6,%,%』9}表示其性状即
Xi={冷,x2,x3,x4,x5,xi6,xi7,為Xi9,XlO’Xll,冷分(i=1,2,…,12)于是得到原
是数据矩阵
7
5
2
5
0
1
3
4
2
12
17
8
21
9
2
38
4
37
83
29
59
65
37
20
54
13
26
53
13
31
36
21
23
12
18
14
178
69
112
78
104
36
94
31
47
23
25
36
11
12
11
24
6
16
A=
101
32
53
52
86
52
41
38
94
28
6
7
8
8
2
0
3
29
169
51
58
72
49
30
48
37
146
327
91
126
92
89
69
79
29
49
93
27
54
64
24
17
23
11
49
18
7
9
5
1
2
18
3
8
(2)数据标准化
运用matlab编程由函数F」isjbzh.m【见附录3.4】的标准化矩阵是
附录3.4
function[X]=F_JISjBzh(cs,X)
%模糊聚类分析数据标准化变换
%X原始数据矩阵;cs=0,不变换;cs=1,标准差变换%cs=2,极差变换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);endxk=xk/n;sk=0;
for(i=1:
n)sk=sk+(X(i,k)-xkF2;endsk=sqrt(sk/n);
for(i=1:
n)X(i,k)=(X(i,k)-xk)/sk;end
end
else%平移*极差变换
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);endif(xmaxfor(i=1:
n)X(i,k)=(X(i,k)-xmin)/(xmax-xmin);endend
end
0
0
0
0
0
0
0.0319
0.0286
0
0.0156
0.1395
0.0484
0.1839
0.0865
0.0147
0.404302860.2431
0.2375
0.2791
0.4597
0.6897
0.3558
0.2794
0.5745
0.2857
0.1667
0.1437
0.0930
0.2339
0.3563
0.2019
0.3235
0.1277
0.4286
0.0833
0.5344
0.7442
0.8871
0.8391
1.0000
0.5147
1.0000
0.8000
0.3125
0.0500
0.2326
0.2742
0.0690
0.1154
0.1471
0.2553
0.0857
0.0972
0.2938
0.3140
0.4113
0.5402
0.8269
0.7500
0.4362
1.0000
0.6389
0.0656
0.0116
0.0403
0.0345
0.0769
0.0147
0
0
0.1875
0.5062
0.5349
0.4516
0.7701
0.4712
0.4265
0.5106
0.9714
1.0000
1.0000
1.0000
1.0000
1.0000
0.8558
1.0000
0.8404
0.7429
0.3264
0.2687
0.2558
0.4194
0.6782
0.2308
0.2353
0.2447
0.2286
0.3264
0.0344
0.0233
0.0565
0
0.0096
0.0147
0.1915
0
0.0417
B=
第二步:
标定(建立模糊相似矩阵)
对标定我们运用了直接欧几里得距离法:
rij1cd(Xi,Xj)
其中c为任意选区的参数,它使得0Nj<1,d(Xi,Xj)表示x与Xj的距离,
运用matlab软件编写F_jir.m函数【见附录3.5】,取cs==8,的模糊
相似矩阵
附录3.5:
(仅附录了一段用到的程序)
function[R]=F_jir(cs,X)
%cs==8,直接欧几里得距离法
%cs==9,直接海明距离法(绝对值减数法)
%cs==10,直接切比雪夫距离法elseif(cs<=10)
C=0;
for(i=1:
n)
for(j=i+1:
n)
d=0;
%直接欧几里得距离法
if(cs==8)
for(k=1:
m)
d=d+(X(i,k)-X(j,k)F2;
end
d=sqrt(d);
%直接海明距离法
elseif(cs==9)
for(k=1:
m)
d=d+abs(X(i,k)-X(j,k));
end
%直接切比雪夫距离法
else
for(k=1:
m)
if(dd=abs(X(i,k)-X(j,k));
end
end
end
if(CC=d;
end
end
end
C=1/(1+C);
for(i=1:
n)
for(j=1:
n)
d=0;
%直接欧几里得距离法
if(cs==8)
for(k=1:
m)
d=d+(X(i,k)-X(j,k)F2;
end
d=sqrt(d);
%直接海明距离法
elseif(cs==9)
for(k=1:
m)
d=d+abs(X(i,k)-X(j,k));
end
%直接切比雪夫距离法
else
for(k=1:
m)
if(dd=abs(X(i,k)-X(j,k));
end
end
end
R(i,j)=1-C*d;
end
end
3)聚类(求动态聚类图)
<1>传递闭包法
根据标定所得的模糊矩阵,只是一个模糊相似矩阵R,不一定具有传递性,
即R不一定是模糊等价矩阵,还需要对其改造成模糊等价矩阵R',根据定理,
用二次方法求传递闭包t(R),t(R)就是所求模糊等价矩阵R',即:
t(R)
=R',再让由大变到小,就可形成动态聚类图。
通过matlab软件编的函数F_JIDtjl.m【见附录3.6】,得到动态聚类图或者直接运用matlab软件编的函数F_Jlfx.m【见附录3.7】,运行F_Jlfx(2,8,A)得动态聚类图是:
附录3.6:
functionF_JIDtjl(R)%定义函数
%模糊聚类分析动态聚类
%R模糊相似矩阵
[m,n]=size(R);%获得矩阵的行列数
if(m~=n|m==0)return;end
for(i=1:
n)R(i,i)=1;%修正错误
for(j=i+1:
n)
if(R(i,j)<0)R(i,j)=0;
elseif(R(i,j)>1)R(i,j)=1;end
R(i,j)=round(10000*R(i,j))/10000;%保留四位小数R(j,i)=R(i,j);
end
end
js0=0;
while
(1)%求传递闭包
R1=Max_Min(R,R);%【见附录3.6.1】
js0=js0+1;
if(R1==R)break;elseR=R1;end
end
Imd
(1)=1;k=1;
for(i=1:
n)for(j=i+1:
n)pd=1;%找出所有不相同的元素
for(x=1:
k)
if(R(i,j)==Imd(x))pd=0;break;end;end
if(pd)k=k+1;Imd(k)=R(i,j);end
end;end
for(i=1:
k-1)for(j=i+1:
k)
if(Imd(i)end;end;end
for(x=1:
k)%按Imd(x)分类,分类数为flsz(x),临时用Sz记录元素序号
js=0;flsz(x)=0;
for(i=1:
n)pd=1;
for(y=1:
js)if(Sz(y)==i)pd=0;break;end;end
if(pd)
for(j=1:
n)
if(R(i,j)>=Imd(x))js=js+1;Sz(js)=j;end;endflsz(x)=flsz(x)+1;
end
end
end
for(i=1:
k-1)
for(j=i+1:
k)
if(flsz(j)==flsz(i))flsz(j)=0;end;end;end
fl=0;%排除相同的分类
for(i=1:
k)if(flsz(i))fl=fl+1;Imd(fl)=Imd(i);end;end
for(i=1:
n)xhsz(i)=i;end
for(x=1:
fl)%获得分类情况:
对元素分类进行排序
js=0;flsz(x)=0;
for(i=1:
n)pd=1;
for(y=1:
js)if(Sz(y)==i)pd=0;break;end;end
if(pd)if(js==0)y=0;end
for(j=1:
n)if(R(i,j)>=Imd(x))js=js+1;Sz(js)=j;end;end
flsz(x)=flsz(x)+1;
Sz0(flsz(x))=js-y;
end
end
js0=0;
for(i=1:
flsz(x))
for(j=1:
Sz0(i))Sz1(j)=Sz(js0+j);end
for(j=1:
n)for(y=1:
Sz0(i))
if(xhsz(j)==Sz1(y))
js0=js0+1;Sz(js0)=xhsz(j);end;end;end
end
for(i=1:
n)xhsz(i)=Sz(i);end
end
for(x=1:
fl)%获得分类情况:
每一子类的元素个数
js=0;flsz(x)=0;
for(i=1:
n)pd=1;
for(y=1:
js)if(Sz(y)==i)pd=0;break;end;end
if(pd)if(js==0)y=0;end
for(j=1:
n)if(R(i,j)>=Imd(x))js=js+1;Sz(js)=j;end;end
flsz(x)=flsz(x)+1;Sz0(flsz(x))=js-y;
end
end
js0=1;
for(i=1:
flsz(x))y=1;
for(j=1:
flsz(x))
if(Sz(y)==xhsz(js0))
flqksz(x,i)=Sz0(j);js0=js0+Sz0(j);break;end
y=y+Sz0(j);
end
end
end
F_dtjltx=figure('name','动态聚类图','color','w');
axis('off');
Kd=30;Gd=40;y=fl*Gd+Gd;lx=80;
text(24,y+Gd/2,'心;
for(i=1:
n)
text(lx-5+i*Kd-0.4*Kd*(xhsz(i)>9),y+Gd/2,int2str(xhsz(i)));
line([lx+i*Kd,lx+i*Kd],[y,y-Gd]);
linesz(i)=lx+i*Kd;
end
text(lx*1.5+i*Kd,y+Gd/2,'分类数');
y=y-Gd;
for(x=1:
fl)
text(8,y-Gd/2,num2str(Imd(x)));
js0=1;js1=0;
if(x==1)
for(i=1:
flsz(x))
js1=flqksz(x,i)-1;
if(js1)line([linesz(js0),linesz(js0+js1)],[y,y]);end
line([(linesz(js0+js1)+linesz(js0))/2,(linesz(js0+js1)+linesz(js0))/2],[y,y
-Gd]);
linesz(i)=(linesz(js0+js1)+linesz(js0))/2;
js0=js0+js1+1;
end
elsefor(i=1:
flsz(x))
js1=js1+flqksz(x,i);
js2=0;pd=0;
for(j=1:
flsz(x-1))
js2=js2+flqksz(x-1,j);
if(js2==js1)pd=1;break;end
endif(j~==js0)
line([linesz(js0),linesz(j)],[y,y]);endline([(linesz(js0)+linesz(j))/2,(linesz(js0)+linesz(j))/2],[y,y-Gd]);
linesz(i)=(linesz(js0)+linesz(j))/2;
js0=j+1;
end;end
text(2*lx+n*Kd,y-Gd/3,int2str(flsz(x)));
y=y-Gd;
end
图六:
动态聚类图
根据动态聚类图,选定不同的的值,将就可以得到不同的分类
12
11
10
9
8
7
S
附录3.5:
(仅附录了一段用到的程序)
function[R]=F_jir(cs,X)
%cs==8,直接欧几里得距离法
%cs==9,直接海明距离法(绝对值减数法)
%cs==10,直接切比雪夫距离法
elseif(cs<=10)
C=0;
for(i=1:
n)
for(j=i+1:
n)
d=0;
%直接欧几里得距离法
if(cs==8)
for(k=1:
m)
d=d+(X(i,k)-X(j,k)F2;
end
d=sqrt(d);
%直接海明距离法
elseif(cs==9)
for(k=1:
m)
d=d+abs(X(i,k)-X(j,k));
end
%直接切比雪夫距离法
else
for(k=1:
m)
if(dd=abs(X(i,k)-X(j,k));
end
end
end
if(CC=d;
end
end
end
C=1/(1+C);
for(i=1:
n)
for(j=1:
n)
d=0;
%直接欧几里得距离法
if(cs==8)
for(k=1:
m)
d=d+(X(i,k)-X(j,k)F2;
end
d=sqrt(d);
%直接海明距离法
elseif(cs==9)for(k=1:
m)
d=d+abs(X(i,k)-X(j,k));
end
%直接切比雪夫距离法
elsefor(k=1:
m)
if(dd=abs(X(i,k)-X(j,k));
end
end
end
R(i,j)=1-C*d;
end
end
附录3.6.1
function[C]=Max_Min(A,B)
%模糊矩阵的合成运算,先取大,后取小
[m,s]=size(A);[s1,n]=size(B);C=[];
if(s1~=s)return;end
for(i=1:
m)for(j=1:
n)C(i,j)=0;
for(k=1:
s)x=0;
if(A(i,k)
elsex=B(k,j);end
if(C(i,j)end
end;end
附录3.7:
functionF_jlfx(bzh,fa,X)
X原始数据矩阵
%模糊聚类分析
%bah数据标准型;fa建立模糊相似矩阵的方法;
X=F_jisjbzh(bzh,X);
R=F_jir(fa,X);
[m,n]=size(R);
if(m~=n|m==0)
return;
end
F_JIDtjl(R)