matlab模糊聚类程序.docx
《matlab模糊聚类程序.docx》由会员分享,可在线阅读,更多相关《matlab模糊聚类程序.docx(15页珍藏版)》请在冰豆网上搜索。
matlab模糊聚类程序
3.数据标准化
(1)数据矩阵
设论域
为被分类的对象,每个对象又由指标
表示其性状即
(i=1,2,…,12)于是得到原是数据矩阵
(2)数据标准化
将模糊矩阵的每一个数据压缩到[0,1]上,采用平移.极差变换进行数据标准化
(k=1,2,…,m)
运用matlab编程由函数F_jisjbzh.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);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
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);end
if(xmaxend
for(i=1:
n)X(i,k)=(X(i,k)-xmin)/(xmax-xmin);end
end
end
第二步:
标定(建立模糊相似矩阵)
对标定我们运用了直接欧几里得距离法:
其中c为任意选区的参数,它使得0≤
≤1,
表示
与
的距离,
运用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))^2;
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))^2;
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)x=Imd(j);Imd(j)=Imd(i);Imd(i)=x;
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;end
flsz(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
end
if(j~==js0)line([linesz(js0),linesz(j)],[y,y]);end
line([(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
图六:
动态聚类图
根据动态聚类图,选定不同的
的值,将就可以得到不同的分类。
附录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))^2;
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))^2;
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.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)
%模糊聚类分析
%bah数据标准型;fa建立模糊相似矩阵的方法;X原始数据矩阵
X=F_jisjbzh(bzh,X);
R=F_jir(fa,X);
[m,n]=size(R);
if(m~=n|m==0)
return;
end
F_JIDtjl(R)