资源描述:
《最短距离聚类matlab实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、最短距离聚类的matlab实现说明:正文中命令部分可以直接在Matlab中运行,作者(Yangfd09)在MATLABR2009a(7.8.0.347)中运行通过%最短距离聚类%说明:此程序的优点在于每一步都是自己编写的,很少用matlab现成的指令,%所以更适合于初学者,有助于理解各种标准化方法和距离计算方法。%程序包含了极差标准化(两种方法)、中心化、标准差标准化、总和标准化和极大值标准化等标准化方法,%以及绝对值距离、欧氏距离、明科夫斯基距离和切比雪夫距离等距离计算方法。%=============
2、=============>>导入数据<<==============================%变量存放在data.mat中,变量名为test%数据要求:m行n列,m为要素个数,n为区域个数loaddata.mattestdata=test;%============================>>标准化<<===============================%变量初始化,m用来寻找每行的最大值,n找最小值,s记录每行数据的和[M,N]=size(testdata);m=zeros(
3、1,M);n=9999*ones(1,M);s=zeros(1,M);eq=zeros(1,M);%为m、n和s赋值fori=1:Mforj=1:Niftestdata(i,j)>=m(i)m(i)=testdata(i,j);endiftestdata(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);fori=1:Mforj=
4、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=zero
5、s(M,N);testdata_jdzh=zeros(M,N);fori=1:Mforj=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
6、,j)./he(i);testdata_jdzh(i,j)=testdata(i,j)/m(i);endend%=================>>选择标准化方式,计算距离<<=========================test=testdata_jc1';%把此处修改为你需要的标准化方式,注意不要删掉转置符号“’”%testdata_jc1:极差标准化,分子减去最小值;testdata_jc0:极差标准化,不减最小值%testdata_zx:中心标准化;testdata_std:标准化擦标准化;
7、%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'
8、
9、a=='y')%d_ming0=zeros(M,M);%p=inp
10、ut('输入参数p:','s');%p=str2double(p);%end%endfori=1:Mforj=1:Mfork=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'
11、
12、a=='y')%d