当前位置:文档之家› 最短距离聚类的matlab实现-1(含聚类图-含距离计算)

最短距离聚类的matlab实现-1(含聚类图-含距离计算)

最短距离聚类的matlab实现-1【2013-5-21更新】说明:正文中命令部分可以直接在Matlab中运行,作者(Yangfd09)于2013-5-21 19:15:50在MATLAB R2009a(7.8.0.347)中运行通过%最短距离聚类(含距离计算,含聚类图)%说明:此程序的优点在于每一步都是自己编写的,很少用matlab现成的指令,%所以更适合于初学者,有助于理解各种标准化方法和距离计算方法。

%程序包含了极差标准化(两种方法)、中心化、标准差标准化、总和标准化和极大值标准化等标准化方法,%以及绝对值距离、欧氏距离、明科夫斯基距离和切比雪夫距离等距离计算方法。

%==========================>>导入数据<<============================== %变量名为test(新建一个以test变量,双击进入Variable Editor界面,将数据复制进去即可)%数据要求:m行n列,m为要素个数,n为区域个数(待聚类变量)。

% 具体参见末页测试数据。

testdata=test;%============================>>标准化<<=============================== %变量初始化,m用来寻找每行的最大值,n找最小值,s记录每行数据的和[M,N]=size(testdata);m=zeros(1,M);n=9999*ones(1,M);s=zeros(1,M);eq=zeros(1,M);%为m、n和s赋值for i=1:Mfor j=1:Nif testdata(i,j)>=m(i)m(i)=testdata(i,j);endif testdata(i,j)<=n(i)n(i)=testdata(i,j);ends(i)=s(i)+testdata(i,j);endeq(i)=s(i)/N;end%sigma0是离差平方和,sigma是标准差sigma0=zeros(M);for i=1:Mfor j=1:Nsigma0(i)=sigma0(i)+(testdata(i,j)-eq(i))^2;endendsigma=sqrt(sigma0/N);jicha=m-n;%极差标准化(两种方法)、中心化、标准差标准化、总和标准化和极大值标准化。

he=sum(testdata,2);testdata_jc0=zeros(M,N);testdata_jc1=zeros(M,N);testdata_zx=zeros(M,N);testdata_std=zeros(M,N);testdata_zonghe=zeros(M,N);testdata_jdzh=zeros(M,N);for i=1:Mfor j=1:Ntestdata_jc1(i,j)=(testdata(i,j)-n(i))/jicha(i);testdata_jc0(i,j)=testdata(i,j)/jicha(i);testdata_zx(i,j)=testdata(i,j)-s(i)/N;testdata_std(i,j)=(testdata(i,j)-eq(i))/sigma(i);testdata_zonghe(i,j)=testdata(i,j)./he(i);testdata_jdzh(i,j)=testdata(i,j)/m(i);endend%=================>>选择标准化方式,计算距离<<========================= test=testdata_jc1'; %把此处修改为你需要的标准化方式,注意不要删掉转置符号“ ’ ”% testdata_jc1:极差标准化,分子减去最小值;testdata_jc0:极差标准化,不减最小值% testdata_zx:中心标准化;testdata_std:标准化擦标准化;% testdata_zonghe:总和标准化;testdata_jdzh:极大值标准化。

[M,N]=size(test);a='?';d_abs=zeros(M,M);d_ou0=zeros(M,M);d_qie=zeros(M,M);d_qie0=zeros(1,N);%===>>如果需要计算明科夫斯基距离,把对应程序行前面的“%”删去即可%if(1)% a=input('计算明可夫斯基距离?(Y/N)','s');% if(a=='Y'||a=='y')% d_ming0=zeros(M,M);% p=input('输入参数p:','s');% p=str2double(p);% end%endfor i=1:Mfor j=1:Mfor k=1:Nd_abs(i,j)=d_abs(i,j)+abs(test(i,k)-test(j,k));d_ou0(i,j)=d_ou0(i,j)+(test(i,k)-test(j,k))^2;d_qie0(k)=abs(test(i,k)-test(j,k));% if(a=='Y'||a=='y')% d_ming0(i,j)=d_ming0(i,j)+abs(test(i,k)-test(j,k))^p;% endendd_qie(i,j)=max(d_qie0);endendd_ou=sqrt(d_ou0);%if(a=='Y'||a=='y')d_ming=(d_ming0).^(1/p);end%=================>>选择距离,进行最短距离聚类<<================test=d_abs;t=0; %把此处修改为你需要的距离类型% d_abs:绝对值距离;d_ou:欧氏距离;d_qie:切比雪夫距离;d_ming:明科夫斯基距离M=length(test(1,:));MM=M;a=1:MM;Z=zeros(MM-1,3);disp('最短距离聚类分析结果:')while(sum(sum(test)))min=9999;for i=1:M %在test中找出最大的相关系数及其下标...for j=1:M %...并提示:合并下标对应的两组数据if(min>test(i,j)&&test(i,j)~=0)min=test(i,j);x=i;y=j;endendendt=t+1;str=['第',num2str(t),'步:lambda=',num2str(min),'>> 合并G(',...num2str(a(x)),')和G(',num2str(a(y)),')','记为G(',num2str(t+MM),')'];disp(str) %提示操作步骤Z(t,:)=[a(x),a(y),min]; %收集dendrogram()画聚类图时所需的数据a([x,y])=[]; %每执行一步,在a中删除被合并的数据号,在末尾顺次新增一个if(~isempty(a))a(end+1)=t+MM;endg=zeros(1,M-2); %生成新的距离矩阵ii=0;for i=1:Mif(i==x||i==y);elseii=ii+1;g(ii)=(test(x,i)<test(y,i))*test(x,i)+(test(x,i)>=test(y,i))*test(y,i);end%...两列变一列:两两比较取其小者endtest([x,y],:)=[];test(:,[x,y])=[];test=cat(1,test,g);test=cat(2,test,[g';0]);M=length(test(1,:));enddendrogram(Z,0); %画树状聚类图title('最短距离聚类');ylabel('lambda');clear M MM i ii j x y g a t min str Z测试数据:(数据较多,显示可能混乱,复制到.mat文件中即可)1249.9 910.17 875.4 299.92 207.78 677.08 545.31 691.23 927.09 1313.12 537.44 616.05 538.4 0.6 0.58 0.23 0.66 0.44 0.63 0.49 0.41 0.46 0.74 0.53 0.36 0.25 184.34 150.11 291.87 23.6 36.53 129.54 187.97 185.32 266.39 206.9 98.92 141.47 142.8 1999.97 2264.55 688.58 273.78 81.65 582.67 842.64 596.63 418.61 5452.91 1307.27 1200.08 1062. 279.09 112.81 35.23 20.33 10.58 56.79 70.92 35.71 48.14 431.85 66.43 44.96 50.17 2680.66 1130.19 709.59 394.31 139.66 901.7 755.68 480.37 645 2597.12 568.05 742.6 524.6 577.33 225.43 75.89 65.4 30.93 115.28 96.59 88.44 130.92 560.54 135.79 118.09 82.4 说明:1.本数据为35个城市的总人口、非农业人口比例、农业总产值、工业总产值、地方财政预算内收入、城乡居民年底储蓄余额、在岗职工工资额度数据2.人口单位:万人,后六项单位10^8元。

更新说明:本次更新【2013-5-21】内容:1.改动了聚类部分,增加了聚类图。

2.数据导入方式改成了直接复制粘贴。

相关主题