3.数据标准化(1) 数据矩阵设论域12345678910,1112U={,,,,,,,,,,}x x x x x x x x x x x x 为被分类的对象,每个对象又由指标123456789Y={,,,,,,,,}y y y y y y y y y 表示其性状即12345678910,1112x ={,,,,,,,,,,}i i i i i i i i i i i i i x x x x x x x x x x x x (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 A= 23 12 18 14 178 69 112 78 104 36 94 31 47 23 25 36 11 12 11 24 6 16 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) 数据标准化将模糊矩阵的每一个数据压缩到[0,1]上,采用平移.极差变换进行数据标准化1i n1i n 1i n A(i,k)-{A(i,k)}B(i,k)={A(i,k)}-{A(i,k)}min max min ≤≤≤≤≤≤ (k=1,2,…,m)运用matlab 编程由函数F_jisjbzh.m 【见附录3.4】的标准化矩阵是附录3.4function [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)-xk)^2;endsk=sqrt(sk/n);for(i=1:n) X(i,k)=(X(i,k)-xk)/sk;endendelse %平移*极差变换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(xmax<X(i,k)) xmax=X(i,k);endendfor(i=1:n) X(i,k)=(X(i,k)-xmin)/(xmax-xmin);endendend0 0 0 0 0 0 0.0319 0.0286 0 0.0156 0.1395 0.0484 0.1839 0.0865 0.0147 0.4043 0.B=0286 0.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⎛⎫ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭ 第二步:标定(建立模糊相似矩阵)对标定我们运用了直接欧几里得距离法:ij r 1c d(x ,x )i j =-⨯其中c 为任意选区的参数,它使得0≤ij r ≤1,d(x ,x )i j 表示i x 与j x 的距离,(,)i j d x x =运用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;endd=sqrt(d);%直接海明距离法elseif(cs==9)for(k=1:m)d=d+abs(X(i,k)-X(j,k)); end%直接切比雪夫距离法elsefor(k=1:m)if(d<abs(X(i,k)-X(j,k))) d=abs(X(i,k)-X(j,k)); endendendif(C<d)C=d;endendendC=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;endd=sqrt(d);%直接海明距离法elseif(cs==9)for(k=1:m)d=d+abs(X(i,k)-X(j,k)); end%直接切比雪夫距离法elsefor(k=1:m)if(d<abs(X(i,k)-X(j,k)))d=abs(X(i,k)-X(j,k));endendendR(i,j)=1-C*d;endend1.0000 0.8596 0.6731 0.7995 0.3715 0.8668 0.4930 0.9383 0.4602 0.2745 0.7151 0.9499 0.8596 1.0000 0.7638 0.8150 0.4634 0.8973 0.5608 0.87R =46 0.5490 0.3541 0.7866 0.8972 0.6731 0.7638 1.0000 0.8140 0.6694 0.7736 0.6961 0.6907 0.6812 0.5618 0.8907 0.7016 0.7995 0.8150 0.8140 1.0000 0.5349 0.8534 0.6705 0.8105 0.6204 0.4449 0.8491 0.8063 0.3715 0.4634 0.6694 0.5349 1.0000 0.4863 0.7104 0.3928 0.6905 0.7863 0.5998 0.4001 0.8668 0.8973 0.7736 0.8534 0.4863 1.0000 0.5801 0.8755 0.5494 0.3881 0.7991 0.89720.4930 0.5608 0.6961 0.6705 0.7104 0.5801 1.0000 0.5216 0.8026 0.6199 0.6783 0.5091 0.9383 0.8746 0.6907 0.8105 0.3928 0.8755 0.5216 1.0000 0.4959 0.2979 0.7446 0.9300 0.4602 0.5490 0.6812 0.6204 0.6905 0.5494 0.8026 0.4959 1.0000 0.6214 0.6852 0.4802 0.2745 0.3541 0.5618 0.4449 0.7863 0.3881 0.6199 0.2979 0.6214 1.0000 0.5161 0.3002 0.7151 0.7866 0.8907 0.8491 0.5998 0.7991 0.6783 0.7446 0.6852 0.5161 1.0000 0.7343 0.9499 0.8972 0.7016 0.8063 0.4001 0.8972 0.5091 0.9300 0.4802 0.3002 0.7343 1.0000⎛⎫ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭(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:function F_JIDtjl(R)%定义函数%模糊聚类分析动态聚类%R 模糊相似矩阵[m,n]=size(R);%获得矩阵的行列数if(m~=n|m==0) return ;endfor(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;endR(i,j)=round(10000*R(i,j))/10000;%保留四位小数R(j,i)=R(i,j);endendjs0=0;while(1)%求传递闭包R1=Max_Min(R,R);%【见附录3.6.1】js0=js0+1;if(R1==R) break;else R=R1;endendImd(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;endif(pd) k=k+1;Imd(k)=R(i,j);endend;endfor(i=1:k-1) for(j=i+1:k)if(Imd(i)<Imd(j))%从大到小排序x=Imd(j);Imd(j)=Imd(i);Imd(i)=x;end;end;endfor(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;endif(pd)for(j=1:n)if(R(i,j)>=Imd(x)) js=js+1;Sz(js)=j;end;end flsz(x)=flsz(x)+1;endendendfor(i=1:k-1)for(j=i+1:k)if(flsz(j)==flsz(i)) flsz(j)=0;end;end;endfl=0;%排除相同的分类for(i=1:k) if(flsz(i)) fl=fl+1;Imd(fl)=Imd(i);end;endfor(i=1:n) xhsz(i)=i;endfor(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;endif(pd) if(js==0) y=0;endfor(j=1:n) if(R(i,j)>=Imd(x)) js=js+1;Sz(js)=j;end;endflsz(x)=flsz(x)+1;Sz0(flsz(x))=js-y;endendjs0=0;for(i=1:flsz(x))for(j=1:Sz0(i)) Sz1(j)=Sz(js0+j);endfor(j=1:n) for(y=1:Sz0(i))if(xhsz(j)==Sz1(y))js0=js0+1;Sz(js0)=xhsz(j);end;end;endendfor(i=1:n) xhsz(i)=Sz(i);endendfor(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;endif(pd) if(js==0) y=0;endfor(j=1:n) if(R(i,j)>=Imd(x)) js=js+1;Sz(js)=j;end;endflsz(x)=flsz(x)+1;Sz0(flsz(x))=js-y;endendjs0=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;endy=y+Sz0(j);endendendF_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;endtext(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]);endline([(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;endelse for(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;endendif(j~==js0)line([linesz(js0),linesz(j)],[y,y]);endline([(linesz(js0)+linesz(j))/2,(linesz(js0)+linesz(j))/2],[y,y-G d]);linesz(i)=(linesz(js0)+linesz(j))/2;js0=j+1;end;endtext(2*lx+n*Kd,y-Gd/3,int2str(flsz(x)));y=y-Gd;end图六:动态聚类图根据动态聚类图,选定不同的 的值,将就可以得到不同的分类。