模糊聚类与模糊综合评价

来源:互联网 发布:公认人品差的明星知乎 编辑:程序博客网 时间:2024/05/06 10:53

MATLAB实现模糊聚类与模糊综合评价(三个程序,其中许峰教授做的)

                                                                                                ----来自安徽理工大学理学院许峰教授的暑期数学建模课件

function Fuzzy_method_all

function Fuzzy_method_all% 本程序通过一个较为复杂的例子演示了如何调用相关子程序实现模糊聚类与模糊综合评价。clear,clc,format short g% 原始数据矩阵.%   人口    GDP      工业   财政收入  财政支出 固定资产 居民储蓄 环境治理A0=[%花色苷酒石酸(g/L)苹果酸(g/L)柠檬酸(g/L)多酚氧化酶活力褐变度DPPH自由基408.028 2.060 18.210 1.830 33.753 1119.853 0.4301 224.367 9.930 4.750 0.770 30.904 762.525 0.4644 157.939 8.080 2.960 1.050 19.303 266.640 0.4090 79.685     3.770 5.230 0.550 15.534 72.905 0.2655 120.606 9.490 3.770 1.440 31.536 143.513 0.3961 46.186     2.830 2.210 036.774 115.943 0.2750 60.767     5.820 7.740 0.540 25.591 433.751 0.1756 241.397 5.710 13.550 2.510 50.434 1305.595 0.4148 240.843 13.230 4.120 1.100 16.869 424.108 0.6658 44.203     2.450 2.300 0.240 10.427 459.569 0.3255 7.787     9.290 8.610 1.900 14.260 91.468 0.2790 32.343     6.080 5.330 1.130 21.080 132.216 0.1973 65.324     4.300 0.830 1.150 28.076 99.881 0.4406 140.257 5.730 4.120 1.630 41.577 991.046 0.3597 52.792     6.230 3.630 2.060 25.743 157.997 0.2189 60.660     9.030 7.280 2.380 13.648 529.969 0.2367 59.424     5.880 5.110 0.880 17.174 129.581 0.3585 40.228     3.60 5.590 0.520 27.077 158.870 0.2256 115.704 5.560 4.270 0.130 30.408 202.962 0.3796 23.523 3.510 0.920 0.440 12.439 89.770 0.2819 89.282 15.510 2.930 2.380 18.123 194.262 0.3793 74.027 6.490 7.730 0.770 21.824 417.665 0.2837 172.626 4.080 5.200 0.390 16.406 427.028 0.5725 144.881 8.360 4.600 1.700 15.066 144.729 0.2830 49.643 2.870 2.480 0.160 14.280 140.946 0.3509 58.469 7.150 1.400 0.820 32.026 82.359 0.3172 34.190 6.230 1.390 1.260 23.035 592.199 0.2649 ]%[l,k]=find(A0==0);%ratio=mean(A0([1:l-1,l+1:end],k)./A0([1:l-1,l+1:end],2));%A0(l,k)=A0(l,2)*ratio;A=[]; % A记录七个人均指标.for i=2:size(A0,2)    A=[A A0(:,i)./A0(:,1)];endDynamic_clustering(A,7);B=round(A); % A取整为B,B将写入正文.[m n]=size(A);% 标准化原始数据矩阵 A,标准化矩阵仍记为 A.A=Standard(A);% 将标准化矩阵 A 写入 excel,文件名为 result.xls.you=fopen('result.xls','w');fprintf(you,'       \n');fprintf(you,'标准化矩阵\n');geshi1=[]; % 写入excel的书写格式.for i=1:m-1    geshi1=[geshi1 '%f\t'];endgeshi1=[geshi1 '%f\n'];for i = 1:n    fprintf(you,geshi1,A(i,:));end;% 第一个问题:模糊聚类R=Fuzzy_similarity_matrix(A,7);% 再应用平方法计算R的传递闭包,仍记闭包为R.R=Transtive_closure(R);% 将传递闭包矩阵R写入resultforbook.xls.fprintf(you,'       \n');fprintf(you,'模糊等价矩阵的传递闭包\n');geshi2=[]; % 写入excel的书写格式.for i=1:m-1    geshi2=[geshi2 '%f\t'];endgeshi2=[geshi2 '%f\n'];for i = 1:m    fprintf(you,geshi2,R(i,:));end;% 求R的lamda截矩阵,这需要分类水平lamda:lamda=Classification_level(R);% 将分类水平 lamda 写入 result_forbook.xls.fprintf(you,'       \n');fprintf(you,'分类水平\n');fprintf(you,geshi2,lamda);for p=1:length(lamda)    %显示 lamda(p) 水平上分类情况.    M(:,:,p)=R>=lamda(p);    [cls nmb]=Computing_cls(M(:,:,p));    disp(' '); %显示一空行是为了方便阅读显示内容.    disp(['在分类水平 ',num2str(lamda(p)),'上分为 ',num2str(nmb),'类: ']);    cities{1}='1 '; cities{2}='2 '; cities{3}='3 '; cities{4}='4 '; cities{5}='5 ';     cities{6}='6 '; cities{7}='7 '; cities{8}='8 '; cities{9}='9 '; cities{10}='10 ';     cities{11}='11 '; cities{12}='12'; cities{13}='13 '; cities{14}='14 '; cities{15}='15 ';     cities{16}='16 '; cities{17}='17 '; cities{18}='18 '; cities{19}='19 '; cities{20}='20 ';     cities{21}='21 '; cities{22}='22 '; cities{23}='23 '; cities{24}='24 '; cities{25}='25 ';    cities{26}='26 '; cities{27}='27 ';    % cities{28}='成都 '; cities{29}='贵阳 '; cities{30}='昆明 '; cities{31}='西安 '; cities{32}='兰州 '; cities{33}='西宁 '; cities{34}='银川 '; cities{35}='乌鲁木齐 ';     for i=1:nmb        if length(cls{i})==1            cities{cls{i}}(end)=[];            disp(['"',cities{cls{i}},'"','  自成一类']);        else            ct=[];            for t=1:length(cls{i})                ct=[ct cities{cls{i}(t)}];            end            ct(end)=[];            disp([' "',ct,'"',' 归为一类']);        end    end    %求水平lamda(p)上的 F 值--F(p).    F(p)=F_statistic(M(:,:,p),A);enddisp('       ')[v,ind]=max(F);disp(['在所有分类中分为 ' num2str(ind) ' 类是最合理的.'])% 第二个问题:模糊模式识别.% 计算七个类聚类中心.I=[2 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 26 28 29 30 32 34 35];II=[25 27];alpha1=mean(A(I,:)); alpha2=mean(A(II,:));W=[A(1,:);alpha1;A(3,:);A(24,:);alpha2;A(31,:);A(33,:)];% C-待识别的甲乙丙三城市的原始数据.C=[89962 43704 13134 12756 19356 43662 658   37959 11662 8197  8251  12993 26005 857   16642 9037  11071 12112 28451 39037 1302];C=Standard(C);D=dist(C,W'); % C到聚类中心W的欧氏距离.disp('    ');jyb='甲乙丙';for i=1:size(D,1)    [val,ind]=min(D(i,:));    disp(['城市' jyb(i) '属于' num2str(ind) '类.'])end% 第三个问题:模糊综合评价.O=[1 1 1 1 1 1 0]; %虚拟的最优对象O.E=dist(A,O'); % 35个城市到最优对象聚O的欧氏距离.[hh ss]=sort(E); % ss记录了35个城市按距离的排序结果.disp('       ');disp('距离法给出35个城市排序为: ');disp( num2str(ss'));    function S=Standard(x)% 本子程序功能是通过标定和压缩对原始数据进行标准化。n=size(x,2); mu=mean(x); sig=std(x);for j=1:n    R(:,j)=(x(:,j)-mu(j))/sig(j);    S(:,j)=(R(:,j)-min(R(:,j)))/(max(R(:,j))-min(R(:,j)));endfunction r=Fuzzy_similarity_matrix(x,method)% 本子程序功能是分别用7种方法建立模糊相似矩阵。[m,n]=size(x);for i=1:m    for j=1:m        ed(i,j)=sqrt(sum((x(i,:)-x(j,:)).^2));        hd(i,j)=sum(abs(x(i,:)-x(j,:)));    endendfor i=1:m    for j=1:m        K(i,j)=sum(x(i,:).*x(j,:));    endendfor i=1:m    K(i,i)=0;endE=max(max(ed)); H=max(max(hd)); M=max(max(K));disp('  ');if method==1    disp('夹角余弦法建立模糊相似矩阵');elseif method==2    disp('相似系数法建立模糊相似矩阵');elseif method==3    disp('欧氏距离法建立模糊相似矩阵');elseif method==4    disp('海明距离法建立模糊相似矩阵');elseif method==5    disp('指数距离法建立模糊相似矩阵');elseif method==6    disp('数量积法建立模糊相似矩阵');elseif method==7    disp('算术平均最小法建立模糊相似矩阵');endfor i=1:m    for j=1:m        if method==1            r(i,j)=sum(x(i,:).*x(j,:))/sqrt(sum(x(i,:).^2)*sum(x(j,:).^2));        elseif method==2            r(i,j)=sum(abs((x(i,:)-mean(x(i,:))).*(x(j,:)-mean(x(j,:)))))/sqrt(sum((x(i,:)-mean(x(i,:))).^2*sum((x(j,:)-mean(x(j,:))).^2)));        elseif method==3            r(i,j)=1-ed(i,j)/E;        elseif method==4            r(i,j)=1-hd(i,j)/H;        elseif method==5            r(i,j)=exp(-sum(abs(x(i,:)-x(j,:))));        elseif method==6            if i==1                r(i,j)=1;            else                r(i,j)=sum(x(i,:).*x(j,:))/M;            end        elseif method==7            mink=[];            for k=1:n                mink=[mink min(x(i,k),x(j,k))];            end            r(i,j)=2*sum(mink)/sum(x(i,:)+x(j,:));        end    endendfunction b=FSM_square(x)% 本子程序功能是求模糊相似矩阵的平方;输入参数x必须是一个模糊方阵,输出为x的平方。[m,n]=size(x);if m~=n    disp('输入矩阵不是方阵,请重新输入一个方阵');    returnendfor i=1:n    for j=1:m        for k=1:n            b(k)=min(x(i,k),x(k,j));        end        xsquare(i,j)=max(b);    endendb=xsquare;function bibao=Transtive_closure(x)% 本子程序功能是求模糊相似矩阵x的传递闭包,以用于模糊聚类。[m,n]=size(x);if m~=n    disp('输入矩阵不是方阵,请重新输入一个方阵');    returnendxsquare=FSM_square(x);while sum(sum(x==xsquare))~=n^2;    x=xsquare;    xsquare=FSM_square(x);endbibao=xsquare;function A=Classification_level(x)% 本子程序功能是求动态模糊聚类的分类水平。[m,n]=size(x);B=sort(reshape(x,1,m*n));M=B(end);i=1;while B(i)<M    L=find(B==B(i));    B(L(2:end))=[];    i=i+1;endL=find(B==M);B(L(2:end))=[];A=B;function [cls,nmb]=Computing_cls(x)% 本子程序功能是求存储分类的数组cls及相应分类下包含对象的数量。m=size(x,1);for i=1:m    J=[];    for j=1:m        if x(i,j)==1            J=[J,j];        end    end    cl{i}=J;endfor i=1:m    for j=i+1:m        if length(cl{j})==length(cl{i})            if sum(cl{j}==cl{i})==length(cl{i})                cl{i}=[];            end        end    endendcls=[];for i=1:m    if ~isempty(cl{i})        cls=[cls cl(i)];    endendnmb=length(cls);        function F=F_statistic(r,x)% 本子程序功能是求F统计量,以确定最佳分类数目。[cls,nmb]=Computing_cls(r);m=size(r,1);ubar=mean(x);for k=1:nmb    s=cls{k};    if length(s)==1        ukbar(k,:)=x(s,:);    else        ukbar(k,:)=mean(x(s,:));    end    fz(k)=length(s)*sum((ukbar(k,:)-ubar).^2)/(nmb-1);    for l=1:length(s)        fm0(k,l)=sum((x(s(l))-ukbar(k,:)).^2);    end    fm(k)=sum(fm0(k,:)/(m-nmb));endF=sum(fz)/sum(fm);function Dynamic_clustering(x,method)% 本子程序功能是动态聚类图,返回的是原始数据的动态聚类图。close all;A=Standard(x);B=Fuzzy_similarity_matrix(A,method);R=Transtive_closure(B);lamda=Classification_level(R);m=length(lamda);for i=1:m    M(:,:,i)=R>=lamda(i);    cls=Computing_cls(M(:,:,i));    allcls{i}=cls;endrr=[];for i=1:length(allcls)-1    ind=[];    for j=1:i        ind0=[];        for k=1:i+1            ind0=[ind0 ismember(allcls{i+1}{k}(1),allcls{i}{j})];        end        ind=[ind;ind0];    end    tmp=allcls{i+1};    for r=1:i        if sum(ind(r,:))==2            tp=ind(r,:);            s=find(tp==1);            allcls{i+1}{r}=tmp{s(1)};            allcls{i+1}{r+1}=tmp{s(2)};            t1=[1:r-1,r+1:i];            t2=[1:r-1,r+2:i+1];            for t=1:i-1                allcls{i+1}{t2(t)}=allcls{i}{t1(t)};            end            rr=[rr r];        end    endendseq0=allcls{end};seq=[];for i=1:m    seq=[seq allcls{end}{i}];endfigure,hold on,title('动态聚类图');wide=30; high=25;x0=wide*(m-1); y0=high*m;par=(wide+high)/2;axis([-2.5*par,x0+1.5*par,-par,y0+par]);axis('off');lbx{1}=wide*[0:m-1];for i=2:m    lbx{i}(rr(m+1-i))=(lbx{i-1}(rr(m+1-i))+lbx{i-1}(rr(m+1-i)+1))/2;    for u=1:rr(m+1-i)-1        lbx{i}(u)=lbx{i-1}(u);    end    for v=rr(m+1-i)+1:m+1-i        lbx{i}(v)=lbx{i-1}(v+1);    endendfor i=1:m    text((i-1)*wide-wide/9,-0.5*high,int2str(allcls{end}{i}));endtext(-3.45*par,(m+0.5)*high,'分类水平');text(-3.1*par,0.5*high,num2str(lamda(m)));text(x0+0.3*par,(m+0.5)*high,'分类数');text(x0+1.35*par,0.5*high,num2str(m));for i=1:m    line([(i-1)*wide (i-1)*wide],[0 high]);endfor i=2:m    text(-3.1*par,(i-0.5)*high,num2str(lamda(m+1-i)));    text(x0+1.35*par,(i-0.5)*high,num2str(m+1-i));    line([lbx{i-1}(rr(m+1-i)) lbx{i-1}(rr(m+1-i)+1)],[i-1 i-1]*high);    for j=1:length(lbx{i})        line([lbx{i}(j) lbx{i}(j)],[i-1 i]*high);    endend

2.function Fuzzy_method_all

<pre code_snippet_id="266000" snippet_file_name="blog_20140331_3_6146859" name="code" class="plain">function Fuzzy_method_all% 本程序通过一个较为复杂的例子演示了如何调用相关子程序实现模糊聚类与模糊综合评价。clear,clc,format short g% 原始数据矩阵.%   人口    GDP      工业   财政收入  财政支出 固定资产 居民储蓄 环境治理A0=[1198 78702835 18218601 11171514 12968389 33715013 86984521  388750    949  43591500 22927300  4170479  5431219 18497987 28110200  799933    940  20266320  8751622   773736  1282462 10994463 15532427   27727    349  10136482  3786335   753306   954238  5011273 11839536  284793    216   9000845  2837701   455202   754985  5498228  4530845   46078    704  25196338 10088171  1756336  2687649 17903457 19219758  138814    572  25696699 10588385  1961357  2665249 14694899 18664886  263991    739  17411922  6840335   715908  1466748  9504180 11745969  284745    980  20940751  5894994  1182934  1946839  8098657 15638334  346446   1368 103663700 46701100 15760724 17955660 39250884 94802800 3108523    607  27737800 11819400  2464392  2624614 16135518 18348800  850030    666  34415068 15590895  3013888  2754809 14607422 24736900  141461    560  28744435 14259477  2573799  2926969 15027686 17520388  185041    470  10737600  4093600   794046  1028869  8167825  6245600   15407    623  16640515  6601028  1156184  1100589  7323412 13113823  319000    160  11680229  5603061  1361653  1591253  6620984  6808196  299504    484  11838973  4481541   681075   933749  6430198  7338474  255279    603  21850856  8615053  1284388  1469762 10167663 11825655  442928    749  32065800 15274900  2259904  2367875 14856894 15676197  566252    692  20134777  9440244  1760266  1876587 10319917 16207242   77486    819  25907569 10007433  1786021  2578102 13252827 18877333  104608    631  17989572  6007131  1328345  1671873 10898081 10930400   18404    761  60738277 22210421  4270831  5067899 16963824 55623554  265927    197  58135624 28866206  5008827  5714231 12736693 37447000   10793    672   8701481  2212890   566221   930781  4472211  6814522  178113    177   3501246   798078   211288   322454  1582308  4069576   10570   3199  34915700 12341200  3177165  5942543 24518351 29490500  846064];A0=[2027.960101.220393.42077.610266.600723.880177.37089.28024.83015.74017.1406.58010.8603.1805.03018.8509.97070.660553.106.251408.0282.06018.2101.83033.7531119.853.43023.60422.0199.4803.195.3882.559.248.39417.6785.3057.873.3654.135208.175237.668110.150127.517226.5003.5605.86038.66025.918182.930123.6004.51078.400.11024.070.780.2602128.82064.430140.62071.94039.2601560.97032.38011.13024.11020.6904.6009.42022.8201.3201.30015.45013.57074.130626.478.062224.3679.9304.750.77030.904762.525.46426.87523.36113.8064.889.4533.881.555.39427.4558.51111.5581.4205.967205.000229.136113.498115.638228.8003.9505.19044.05025.98681.62098.3003.83077.500.16326.070.650-1.2508397.280108.070222.350173.08067.5407472.28055.79075.34013.18019.6007.8407.82018.1702.7606.27031.21016.51079.870585.046.315157.9398.0802.9601.05019.303266.640.40921.68520.37310.7944.764.3544.254.156.394164.99319.977115.7326.48222.802256.190273.758132.209141.549257.6003.9107.16035.99028.99783.130105.4005.60071.800.17025.5001.090-.6202144.68079.390133.830158.740156.7201182.23093.23089.36046.70021.9406.55015.79020.7502.5306.08018.91017.45072.530529.823.09779.6853.7705.230.55015.53472.905.26610.6988.6384.4823.412.2872.850.102.17226.9684.18316.0872.2324.465189.722237.766109.316128.450203.3003.2907.11028.61023.721137.970174.7003.26053.000.17425.9801.840-.3701844.00052.280145.090164.050102.430816.08086.83069.54018.64033.67016.46030.48021.6903.3805.30047.77029.740166.900585.613.041120.6069.4903.7701.44031.536143.513.39617.61814.48610.275.637.2344.534.403.3946.6501.9804.313.3586.203209.663195.46099.58595.875212.9003.6406.65032.00024.084515.460254.2002.99065.600.27026.330.880-.3303434.17068.010102.42075.78080.6002932.76018.01019.39023.17012.6302.65010.5207.9002.4602.27010.0009.77043.200536.643.07546.1862.8302.210.00036.774115.943.27510.67115.1736.8382.203.2541.850.100.3947.7271.0565.765.9076.203244.385223.817108.798115.019246.1003.2909.31026.43027.376202.240172.0002.64071.900.19325.1601.810-.1602391.16065.100267.760239.200208.9701096.28074.06089.56018.19046.98011.36018.03033.8401.8602.63026.36036.750107.210487.172.13160.7675.8207.740.54025.591433.751.1769.2145.6193.468.623.523.555.068.3949.8653.1716.480.2146.203209.861303.950142.437161.513211.4003.1808.14025.98026.43863.610168.8004.78071.500.14125.6102.050-.3801950.76072.090345.87044.230176.020962.010150.73042.6306.43020.8409.80016.22019.3802.5803.42015.93010.11031.630558.546.181241.3975.71013.5502.51050.4341305.595.41515.24122.4898.4835.9495.2834.534.549.116115.55511.63073.21118.09912.615198.849196.99094.336102.654226.5002.9206.47034.99025.620213.090181.1006.41059.600.26026.850.800-.5102262.72072.890113.940110.610110.5301334.19095.18042.8007.07033.49015.15024.82026.6105.1908.97032.61034.740160.440700.828.512240.84313.2304.1201.10016.869424.108.66630.11424.36220.4904.907.4233.022.904.55858.54111.06333.1722.77111.535193.690194.92598.70196.224203.4003.7405.88034.58023.761186.620138.1005.31078.000.13023.8101.440-.3801364.14087.520114.290130.870126.710477.50088.14060.5005.75025.3104.00010.56020.0501.2102.97039.04018.530125.880545.30510.25044.2032.4502.300.24010.427459.569.3269.47616.6884.63112.307.52711.140.485.15628.74810.36710.2745.7462.361167.202161.42179.37982.041181.2003.6506.67027.16019.676255.440200.8004.59071.700.20027.1002.170-1.1202355.69094.420111.670141.580186.5201150.090158.36083.16033.21023.9307.17013.44018.0703.5304.62029.09017.710255.190542.662.0767.7879.2908.6101.90014.26091.468.2796.0754.5432.51726.851.27026.335.246.39425.57517.19823.7177.403.975209.563237.891113.952123.939210.2003.5305.50038.24024.527177.830118.8003.41058.400.10228.03012.1503.8702556.79063.32071.68069.35047.8902127.91036.84013.98017.06019.0403.96016.05014.6005.1705.9106.2103.29015.490493.460.06532.3436.0805.3301.13021.080132.216.19712.0597.1693.897.696.100.545.052.3942.4801.67923.717.8016.203247.659262.155124.661137.493261.1003.4308.54030.58027.614191.950187.7002.40063.300.24326.5702.040.0101416.11054.300110.63080.65072.320621.25041.25028.39016.76037.67015.11021.50036.3604.0202.50039.27028.770167.680606.204.01565.3244.300.8301.15028.07699.881.44114.3859.8227.33010.863.69510.050.117.39440.7599.1383.08818.33110.202197.857212.237110.421101.816203.4003.8604.34023.75023.353159.970148.0004.67068.100.16027.5301.040-1.5701237.81071.27056.410104.50064.280677.78039.09051.43022.23015.7301.70012.67011.6601.1203.37014.76012.04062.030599.829.060140.2575.7304.1201.63041.577991.046.36014.65713.9417.8096.313.6615.065.462.126134.6387.123113.25811.1583.098191.508255.335120.444134.892193.9003.3905.40035.90024.060209.110136.3004.60066.200.25525.4101.190-.5702177.91085.200223.120226.600172.690817.57096.020100.86034.22035.08010.72023.91041.2602.1007.54048.43031.440186.070524.613.06852.7926.2303.6302.06025.743157.997.21911.90125.4175.511.211.0984.534.112.3949.718.4728.500.7466.203179.107208.933105.755103.178214.9003.1908.57025.09025.012159.310174.5002.90067.700.21325.5301.980-.0101553.50073.340110.720110.490112.050679.25046.95040.08027.08023.8803.97014.31019.1703.56012.91042.03028.130181.690583.374.08360.6609.0307.2802.38013.648529.969.23711.21410.0869.1574.556.3354.121.100.3948.1902.1611.2333.1761.620204.008189.27592.78596.491205.6003.3004.92041.76022.346119.170109.3003.79071.800.13526.1101.330-.3401713.650107.19095.61089.150100.970806.56062.42044.85026.38032.1105.49020.14028.5204.67010.12047.16024.220175.990548.833.05659.4245.8805.110.88017.174129.581.35915.33615.7308.701.711.414.151.145.39443.8122.42337.4411.8802.068212.738271.504128.705142.799238.2003.4308.66027.51026.276446.640264.1002.80071.500.33025.4001.180-.2502398.38032.45071.49052.06038.2202097.61024.31010.01011.42010.8501.5904.6204.4401.3402.7606.0003.83014.540513.817.11240.2283.6005.590.52027.077158.870.2267.3815.3885.245.416.1154.534.301.3946.516.7415.310.4656.203226.032265.773125.611140.162226.6003.2708.03028.21026.338196.010208.4002.60063.100.16025.5202.870.2102463.60072.94096.13091.11068.7001438.080165.66068.05032.07041.5704.4408.76030.1001.9202.35029.22026.230244.690544.462.072115.7045.5604.270.13030.408202.962.38017.42613.7009.4543.821.1712.879.177.59231.265.95424.8771.6703.764205.794220.333107.601112.732214.9003.5706.81031.54023.441173.090168.8006.32067.400.16227.190.800-1.5102273.63073.490157.320131.450177.910754.8909.890100.70012.62042.04017.17029.96044.7403.0302.79076.89059.410537.280559.332.02423.5233.510.920.44012.43989.770.28212.6778.1158.1551.545.2291.178.279.1389.6266.8911.4341.3026.203193.194227.338114.537112.801209.1003.8105.17040.48022.933307.140334.3003.15059.500.23227.0901.960-.4306346.83069.490180.030194.110107.7305144.81062.22016.36053.64041.46013.66016.12034.2802.5402.23092.41041.040233.250563.794.05089.28215.5102.9302.38018.123194.262.37916.19213.6137.5157.847.6446.437.632.13547.2201.89736.0372.6276.658205.794259.110121.825137.285216.9003.5606.78031.99026.948147.660106.1004.74060.400.10825.1801.210.0002566.610110.520207.260251.110237.700863.990197.32070.86043.77058.80011.86066.93066.9806.6805.25044.61043.580220.580488.712.07474.0276.4907.730.77021.824417.665.28416.44212.1557.8464.289.2053.449.101.53413.800.73712.733.3306.203224.147226.399105.994120.405234.7003.6505.97039.36025.674106.610115.8003.32057.400.14725.9401.520-.0702380.810120.860138.150159.470131.5401341.120106.71078.87035.51042.27011.40018.61035.54010.4906.55033.95018.55048.950543.574.097172.6264.0805.200.39016.406427.028.57329.70424.25724.2959.968.6907.375.3881.51544.7486.61224.496.87612.764207.679212.56499.539113.025208.8003.3906.91030.23023.383278.750219.1003.84077.500.23326.6501.380-.4201638.83058.600160.810148.58059.230797.55088.56079.40034.07030.3206.19011.2208.6001.8602.47024.42017.46079.160525.820.033144.8818.3604.6001.70015.066144.729.2838.75114.4178.2062.935.3212.396.217.39414.3805.8404.2511.0203.270201.825244.512113.682130.830203.3003.6107.27027.98025.815517.450237.4002.99076.700.24725.970.900-.2901409.70073.280130.810115.850150.570479.17088.03057.02041.97026.1504.38015.94020.8501.4603.43036.19016.050122.400537.084.06449.6432.8702.480.16014.280140.946.35111.5029.3245.3732.129.1961.426.219.28830.211.32824.6142.6972.572150.337156.03880.30075.738194.6003.3808.53022.81018.515288.690251.3004.10058.500.22027.1001.520-.920851.17059.00095.66074.47047.830147.70022.81028.72014.94019.4904.30018.42023.3305.7603.98037.29033.450194.540587.293.41658.4697.1501.400.82032.02682.359.3177.3483.7783.3832.086.0951.832.159.39413.9175.3166.0111.815.775173.353197.37789.120108.257195.7003.6804.58042.74019.758793.470245.5003.35068.300.23028.0001.090-.8301116.61051.450132.55079.06048.360418.01029.25028.5809.96028.7405.40010.47032.7507.4404.76027.46024.440149.190528.331.09134.1906.2301.3901.26023.035592.199.2658.89710.3104.7111.569.1661.147.257.39415.9815.9425.1734.8656.203196.667213.216113.46999.747206.9003.3706.97029.67023.329282.090148.7003.51059.500.20028.7902.330-1.230];A=[];for i=2:size(A0,2)    A=[A A0(:,i)./A0(:,1)];endDynamic_clustering(A,1);B=round(A); % A取整为B,B将写入正文.[m n]=size(A);% 标准化原始数据矩阵 A,标准化矩阵仍记为 A.%A=Standard(A);% 将标准化矩阵 A 写入 excel,文件名为 result.xls.you=fopen('result.xls','w');% 第一个问题:模糊聚类R=Fuzzy_similarity_matrix(A,1);% 再应用平方法计算R的传递闭包,仍记闭包为R.R=Transtive_closure(R);% 将传递闭包矩阵R写入resultforbook.xls.fprintf(you,'       \n');fprintf(you,'模糊等价矩阵的传递闭包\n');geshi2=[]; % 写入excel的书写格式.for i=1:m-1    geshi2=[geshi2 '%f\t'];endgeshi2=[geshi2 '%f\n'];for i = 1:m    fprintf(you,geshi2,R(i,:));end;% 求R的lamda截矩阵,这需要分类水平lamda:lamda=Classification_level(R);% 将分类水平 lamda 写入 result_forbook.xls.fprintf(you,'       \n');fprintf(you,'分类水平\n');fprintf(you,geshi2,lamda);for p=1:length(lamda)    %显示 lamda(p) 水平上分类情况.    M(:,:,p)=R>=lamda(p);    [cls nmb]=Computing_cls(M(:,:,p));    disp(' '); %显示一空行是为了方便阅读显示内容.    disp(['在分类水平 ',num2str(lamda(p)),'上分为 ',num2str(nmb),'类: ']);    cities{1}='品种1 '; cities{2}='品种2 '; cities{3}='品种3 '; cities{4}='品种4 '; cities{5}='品种5 ';     cities{6}='品种6 '; cities{7}='品种7 '; cities{8}='品种8'; cities{9}='品种9 '; cities{10}='品种10 ';     cities{11}='品种11 '; cities{12}='品种12 '; cities{13}='品种13 '; cities{14}='品种14 '; cities{15}='品种15 ';     cities{16}='品种16 '; cities{17}='品种17 '; cities{18}='品种18 '; cities{19}='品种19 '; cities{20}='品种20 ';     cities{21}='品种21 '; cities{22}='品种22 '; cities{23}='品种23 '; cities{24}='品种24 '; cities{25}='品种25 ';    cities{26}='品种26 '; cities{27}='品种27 ';     for i=1:nmb        if length(cls{i})==1            cities{cls{i}}(end)=[];            disp(['"',cities{cls{i}},'"','  自成一类']);        else            ct=[];            for t=1:length(cls{i})                ct=[ct cities{cls{i}(t)}];            end            ct(end)=[];            disp([' "',ct,'"',' 归为一类']);        end    end    %求水平lamda(p)上的 F 值--F(p).    F(p)=F_statistic(M(:,:,p),A);enddisp('       ')[v,ind]=max(F);disp(['在所有分类中分为 ' num2str(ind) ' 类是最合理的.'])    function S=Standard(x)% 本子程序功能是通过标定和压缩对原始数据进行标准化。n=size(x,2); mu=mean(x); sig=std(x);for j=1:n    R(:,j)=(x(:,j)-mu(j))/sig(j);    S(:,j)=(R(:,j)-min(R(:,j)))/(max(R(:,j))-min(R(:,j)));endfunction r=Fuzzy_similarity_matrix(x,method)% 本子程序功能是分别用7种方法建立模糊相似矩阵。[m,n]=size(x);for i=1:m    for j=1:m        ed(i,j)=sqrt(sum((x(i,:)-x(j,:)).^2));        hd(i,j)=sum(abs(x(i,:)-x(j,:)));    endendfor i=1:m    for j=1:m        K(i,j)=sum(x(i,:).*x(j,:));    endendfor i=1:m    K(i,i)=0;endE=max(max(ed)); H=max(max(hd)); M=max(max(K));disp('  ');if method==1    disp('夹角余弦法建立模糊相似矩阵');elseif method==2    disp('相似系数法建立模糊相似矩阵');elseif method==3    disp('欧氏距离法建立模糊相似矩阵');elseif method==4    disp('海明距离法建立模糊相似矩阵');elseif method==5    disp('指数距离法建立模糊相似矩阵');elseif method==6    disp('数量积法建立模糊相似矩阵');elseif method==7    disp('算术平均最小法建立模糊相似矩阵');endfor i=1:m    for j=1:m        if method==1            r(i,j)=sum(x(i,:).*x(j,:))/sqrt(sum(x(i,:).^2)*sum(x(j,:).^2));        elseif method==2            r(i,j)=sum(abs((x(i,:)-mean(x(i,:))).*(x(j,:)-mean(x(j,:)))))/sqrt(sum((x(i,:)-mean(x(i,:))).^2*sum((x(j,:)-mean(x(j,:))).^2)));        elseif method==3            r(i,j)=1-ed(i,j)/E;        elseif method==4            r(i,j)=1-hd(i,j)/H;        elseif method==5            r(i,j)=exp(-sum(abs(x(i,:)-x(j,:))));        elseif method==6            if i==1                r(i,j)=1;            else                r(i,j)=sum(x(i,:).*x(j,:))/M;            end        elseif method==7            mink=[];            for k=1:n                mink=[mink min(x(i,k),x(j,k))];            end            r(i,j)=2*sum(mink)/sum(x(i,:)+x(j,:));        end    endendfunction b=FSM_square(x)% 本子程序功能是求模糊相似矩阵的平方;输入参数x必须是一个模糊方阵,输出为x的平方。[m,n]=size(x);if m~=n    disp('输入矩阵不是方阵,请重新输入一个方阵');    returnendfor i=1:n    for j=1:m        for k=1:n            b(k)=min(x(i,k),x(k,j));        end        xsquare(i,j)=max(b);    endendb=xsquare;function bibao=Transtive_closure(x)% 本子程序功能是求模糊相似矩阵x的传递闭包,以用于模糊聚类。[m,n]=size(x);if m~=n    disp('输入矩阵不是方阵,请重新输入一个方阵');    returnendxsquare=FSM_square(x);while sum(sum(x==xsquare))~=n^2;    x=xsquare;    xsquare=FSM_square(x);endbibao=xsquare;function A=Classification_level(x)% 本子程序功能是求动态模糊聚类的分类水平。[m,n]=size(x);B=sort(reshape(x,1,m*n));M=B(end);i=1;while B(i)<M    L=find(B==B(i));    B(L(2:end))=[];    i=i+1;endL=find(B==M);B(L(2:end))=[];A=B;function [cls,nmb]=Computing_cls(x)% 本子程序功能是求存储分类的数组cls及相应分类下包含对象的数量。m=size(x,1);for i=1:m    J=[];    for j=1:m        if x(i,j)==1            J=[J,j];        end    end    cl{i}=J;endfor i=1:m    for j=i+1:m        if length(cl{j})==length(cl{i})            if sum(cl{j}==cl{i})==length(cl{i})                cl{i}=[];            end        end    endendcls=[];for i=1:m    if ~isempty(cl{i})        cls=[cls cl(i)];    endendnmb=length(cls);        function F=F_statistic(r,x)% 本子程序功能是求F统计量,以确定最佳分类数目。[cls,nmb]=Computing_cls(r);m=size(r,1);ubar=mean(x);for k=1:nmb    s=cls{k};    if length(s)==1        ukbar(k,:)=x(s,:);    else        ukbar(k,:)=mean(x(s,:));    end    fz(k)=length(s)*sum((ukbar(k,:)-ubar).^2)/(nmb-1);    for l=1:length(s)        fm0(k,l)=sum((x(s(l))-ukbar(k,:)).^2);    end    fm(k)=sum(fm0(k,:)/(m-nmb));endF=sum(fz)/sum(fm);function Dynamic_clustering(x,method)% 本子程序功能是动态聚类图,返回的是原始数据的动态聚类图。close all;A=Standard(x);B=Fuzzy_similarity_matrix(A,method);R=Transtive_closure(B);lamda=Classification_level(R);m=length(lamda);for i=1:m    M(:,:,i)=R>=lamda(i);    cls=Computing_cls(M(:,:,i));    allcls{i}=cls;endrr=[];for i=1:length(allcls)-1    ind=[];    for j=1:i        ind0=[];        for k=1:i+1            ind0=[ind0 ismember(allcls{i+1}{k}(1),allcls{i}{j})];        end        ind=[ind;ind0];    end    tmp=allcls{i+1};    for r=1:i        if sum(ind(r,:))==2            tp=ind(r,:);            s=find(tp==1);            allcls{i+1}{r}=tmp{s(1)};            allcls{i+1}{r+1}=tmp{s(2)};            t1=[1:r-1,r+1:i];            t2=[1:r-1,r+2:i+1];            for t=1:i-1                allcls{i+1}{t2(t)}=allcls{i}{t1(t)};            end            rr=[rr r];        end    endendseq0=allcls{end};seq=[];for i=1:m    seq=[seq allcls{end}{i}];endfigure,hold on,title('动态聚类图');wide=30; high=25;x0=wide*(m-1); y0=high*m;par=(wide+high)/2;axis([-2.5*par,x0+1.5*par,-par,y0+par]);axis('off');lbx{1}=wide*[0:m-1];for i=2:m    lbx{i}(rr(m+1-i))=(lbx{i-1}(rr(m+1-i))+lbx{i-1}(rr(m+1-i)+1))/2;    for u=1:rr(m+1-i)-1        lbx{i}(u)=lbx{i-1}(u);    end    for v=rr(m+1-i)+1:m+1-i        lbx{i}(v)=lbx{i-1}(v+1);    endendfor i=1:m    text((i-1)*wide-wide/9,-0.5*high,int2str(allcls{end}{i}));endtext(-3.45*par,(m+0.5)*high,'分类水平');text(-3.1*par,0.5*high,num2str(lamda(m)));text(x0+0.3*par,(m+0.5)*high,'分类数');text(x0+1.35*par,0.5*high,num2str(m));for i=1:m    line([(i-1)*wide (i-1)*wide],[0 high]);endfor i=2:m    text(-3.1*par,(i-0.5)*high,num2str(lamda(m+1-i)));    text(x0+1.35*par,(i-0.5)*high,num2str(m+1-i));    line([lbx{i-1}(rr(m+1-i)) lbx{i-1}(rr(m+1-i)+1)],[i-1 i-1]*high);    for j=1:length(lbx{i})        line([lbx{i}(j) lbx{i}(j)],[i-1 i]*high);    endend


0 0
原创粉丝点击