资源描述:
《最短距离聚类的matlab实现-1(含聚类图-含距离计算).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、个人收集整理勿做商业用途最短距离聚类的matlab实现-1【2013-5-21更新】说明:正文中命令部分可以直接在Matlab中运行,作者(Yangfd09)于2013-5-21 19:15:50在MATLAB R2009a(7.8.0.347)中运行通过%最短距离聚类(含距离计算,含聚类图)%说明:此程序的优点在于每一步都是自己编写的,很少用matlab现成的指令,%所以更适合于初学者,有助于理解各种标准化方法和距离计算方法。%程序包含了极差标准化(两种方法)、中心化、标准差标准化、总和标准化和极大值标准化等标准化方法,%以及绝对值距离
2、、欧氏距离、明科夫斯基距离和切比雪夫距离等距离计算方法。%==========================>>导入数据<<==============================%变量名为test(新建一个以test变量,双击进入VariableEditor界面,将数据复制进去即可)%数据要求:m行n列,m为要素个数,n为区域个数(待聚类变量)。% 具体参见末页测试数据。testdata=test;%============================>>标准化<<=============================
3、==%变量初始化,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:M forj=1:N iftestdata(i,j)>=m(i) m(i)=testdata(i,j); end iftestdata(i,j)<=n(i) n(i)=testdata(i,j); end s(i)=s(i)+testdata(i,j);en
4、d个人收集整理勿做商业用途 eq(i)=s(i)/N;end%sigma0是离差平方和,sigma是标准差sigma0=zeros(M);fori=1:M forj=1:N sigma0(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,
5、N);testdata_zx=zeros(M,N);testdata_std=zeros(M,N);testdata_zonghe=zeros(M,N);testdata_jdzh=zeros(M,N);for i=1:M for j=1:N testdata_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
6、)=(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:极差标准化,分子减去最小值;testdat
7、a_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');% i
8、f(a=='Y'
9、
10、a=='y')个人收集整理勿做商业用途% d_ming0=zeros(M,M);% p=input('输入参数p:','s');% p=str2double(p);%