预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共14页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

《计量地理学》(徐建华,高等教育出版社,2005)配套实习指导 §8.利用Matlab和SPSS软件实现聚类分析 1.用Matlab编程实现 运用Matlab中的一些基本矩阵计算方法,通过自己编程实现聚类算法,在此只讨论根据最短距离规则聚类的方法。 调用函数: min1.m——求矩阵最小值,返回最小值所在行和列以及值的大小 min2.m——比较两数大小,返回较小值 std1.m——用极差标准化法标准化矩阵 ds1.m——用绝对值距离法求距离矩阵 cluster.m——应用最短距离聚类法进行聚类分析 print1.m——调用各子函数,显示聚类结果 聚类分析算法 假设距离矩阵为vector,a阶,矩阵中最大值为max,令矩阵上三角元素等于max 聚类次数=a-1,以下步骤作a-1次循环: 求改变后矩阵的阶数,计作c 求矩阵最小值,返回最小值所在行e和列f以及值的大小g forl=1:c,为vector(c+1,l)赋值,产生新类 令第c+1列元素,第e行和第f行所有元素为,第e列和第f列所有元素为max 源程序如下: %std1.m,用极差标准化法标准化矩阵 functionstd=std1(vector) max=max(vector);%对列求最大值 min=min(vector); [a,b]=size(vector);%矩阵大小,a为行数,b为列数 fori=1:a forj=1:b std(i,j)=(vector(i,j)-min(j))/(max(j)-min(j)); end end %ds1.m,用绝对值法求距离 functiond=ds1(vector); [a,b]=size(vector); d=zeros(a); fori=1:a forj=1:a fork=1:b d(i,j)=d(i,j)+abs(vector(i,k)-vector(j,k)); end end end fprintf('绝对值距离矩阵如下:\n'); disp(d) %min1.m,求矩阵中最小值,并返回行列数及其值 function[v1,v2,v3]=min1(vector);%v1为行数,v2为列数,v3为其值 [v,v2]=min(min(vector')); [v,v1]=min(min(vector)); v3=min(min(vector)); %min2.m,比较两数大小,返回较小的值 functionv1=min(v2,v3); ifv2>v3 v1=v3; else v1=v2; end %cluster.m,最短距离聚类法 functionresult=cluster(vector); [a,b]=size(vector); max=max(max(vector)); fori=1:a forj=i:b vector(i,j)=max; end end; fork=1:(b-1) [c,d]=size(vector); fprintf('第%g次聚类:\n',k); [e,f,g]=min1(vector); fprintf('最小值=%g,将第%g区和第%g区并为一类,记作G%g\n\n',g,e,f,c+1); forl=1:c ifl<=min2(e,f) vector(c+1,l)=min2(vector(e,l),vector(f,l)); else vector(c+1,l)=min2(vector(l,e),vector(l,f)); end end; vector(1:c+1,c+1)=max; vector(1:c+1,e)=max; vector(1:c+1,f)=max; vector(e,1:c+1)=max; vector(f,1:c+1)=max; end %print1,调用各子函数 functionprint=print1(filename,a,b);%a为地区个数,b为指标数 fid=fopen(filename,'r') vector=fscanf(fid,'%g',[ab]); fprintf('标准化结果如下:\n') v1=std1(vector) v2=ds1(v1); cluster(v2); %输出结果 print1('fname',9,7) 2.直接调用Matlab函数实现 2.1调用函数 层次聚类法(HierarchicalClustering)的计算步骤: ①计算n个样本两两间的距离{dij},记D ②构造n个类,每个类只包含一个样本; ③合并距离最近的两类为一新类; ④计算新类与当前各类的距离;若类的个数等于1,转到5);否则回3); ⑤画聚类图; ⑥决定类的个数和类; Matlab软件对系统聚