利用Matlab软件实现聚类分析2

上传人:tia****nde 文档编号:36857642 上传时间:2018-04-03 格式:DOC 页数:7 大小:83.50KB
返回 下载 相关 举报
利用Matlab软件实现聚类分析2_第1页
第1页 / 共7页
利用Matlab软件实现聚类分析2_第2页
第2页 / 共7页
利用Matlab软件实现聚类分析2_第3页
第3页 / 共7页
利用Matlab软件实现聚类分析2_第4页
第4页 / 共7页
利用Matlab软件实现聚类分析2_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《利用Matlab软件实现聚类分析2》由会员分享,可在线阅读,更多相关《利用Matlab软件实现聚类分析2(7页珍藏版)》请在金锄头文库上搜索。

1、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

2、 次循环:求改变后矩阵的阶数,计作 c求矩阵最小值,返回最小值所在行 e 和列 f 以及值的大小 gfor l=1:c,为 vector(c+1,l)赋值,产生新类令第 c+1 列元素,第 e 行和第 f 行所有元素为,第 e 列和第 f 列所有元素为max源程序如下:%std1.m,用极差标准化法标准化矩阵 function std=std1(vector) max=max(vector); %对列求最大值 min=min(vector); a,b=size(vector); %矩阵大小,a 为行数,b 为列数 for i=1:afor j=1:bstd(i,j)= (vector(i,j)

3、-min(j)/(max(j)-min(j);end end%ds1.m,用绝对值法求距离 function d=ds1(vector); a,b=size(vector); d=zeros(a); for i=1:afor j=1:afor k=1:bd(i,j)=d(i,j)+abs(vector(i,k)-vector(j,k);endend end fprintf(绝对值距离矩阵如下:n); disp(d)%min1.m,求矩阵中最小值,并返回行列数及其值 function v1,v2,v3=min1(vector);%v1 为行数,v2 为列数,v3 为其值 v,v2=min(min

4、(vector); v,v1=min(min(vector); v3=min(min(vector);%min2.m,比较两数大小,返回较小的值 function v1=min(v2,v3); if v2v3v1=v3;elsev1=v2; end%cluster.m,最短距离聚类法 function result=cluster(vector); a,b=size(vector); max=max(max(vector);for i=1:afor j=i:bvector(i,j)=max;endend; for k=1:(b-1)c,d=size(vector);fprintf(第%g 次聚

5、类:n,k);e,f,g=min1(vector);fprintf(最小值=%g,将第%g 区和第%g 区并为一类,记作 G%gnn,g,e,f,c+1);for l=1:cif l=min2(e,f)vector(c+1,l)=min2(vector(e,l),vector(f,l);elsevector(c+1,l)=min2(vector(l,e),vector(l,f); endend;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

6、; end%print1,调用各子函数 function print=print1(filename,a,b); %a 为地区个数,b 为指标数 fid=fopen(filename,r) vector=fscanf(fid,%g,a b); fprintf(标准化结果如下:n) v1=std1(vector) v2=ds1(v1); cluster(v2);%输出结果 print1(fname,9,7)2.直接调用 Matlab 函数实现2.1 调用函数层次聚类法(Hierarchical Clustering)的计算步骤:计算n个样本两两间的距离dij,记D构造n个类,每个类只包含一个样本

7、;合并距离最近的两类为一新类;计算新类与当前各类的距离;若类的个数等于 1,转到 5) ;否则回 3) ;画聚类图;决定类的个数和类;MatlabMatlab 软件对系统聚类法的实现(调用函数说明):cluster 从连接输出(linkage)中创建聚类clusterdata 从数据集合(x)中创建聚类dendrogram 画系统树状图linkage 连接数据集中的目标为二元群的层次树pdist 计算数据集合中两两元素间的距离(向量)squareform 将距离的输出向量形式定格为矩阵形式zscore 对数据矩阵 X 进行标准化处理 各种命令解释各种命令解释 T = clusterdata(X

8、, cutoff)其中 X 为数据矩阵,cutoff 是创建聚类的临界值。即表示欲分成几类。以上语句等价与以下几句命令:Y=pdist(X,euclid)Z=linkage(Y,single)T=cluster(Z,cutoff)以上三组命令调用灵活,可以自由选择组合方法! T = cluster(Z, cutoff)从逐级聚类树中构造聚类,其中 Z 是由语句 likage 产生的(n-1)3 阶矩阵,cutoff 是创建聚类的临界值。 Z = linkage(Y) Z = linkage(Y, method) 创建逐级聚类树,其中 Y 是由语句 pdist 产生的 n(n-1)/2 阶向量,

9、 method表示用何方法,默认值是欧氏距离(single)。有complete最长距离法;average类平均距离;centroid重心法 ;ward递增平方和等。 Y = pdist(X) Y = pdist(X, metric) 计算数据集 X 中两两元素间的距离, metric表示使用特定的方法,有欧氏距离euclid 、标准欧氏距离SEuclid 、马氏距离mahal、明可夫斯基距离Minkowski 等。 H = dendrogram(Z) H = dendrogram(Z, p)由 likage 产生的数据矩阵 z 画聚类树状图。P 是结点数,默认值是 30。2.2 举例说明设某

10、地区有八个观测点的数据,样本距离矩阵如表 1 所示,根据最短距离法聚类分析。%最短距离法系统聚类分析X=7.90 39.77 8.49 12.94 19.27 11.05 2.04 13.29;7.68 50.37 11.35 13.3 19.25 14.59 2.75 14.87;9.42 27.93 8.20 8.14 16.17 9.42 1.55 9.76;9.16 27.98 9.01 9.32 15.99 9.10 1.82 11.35;10.06 28.64 10.52 10.05 16.18 8.39 1.96 10.81;BX=zscore(X); % 标准化数据矩阵Y=pdist(X) % 用欧氏距离计算两两之间的距离D=squareform(Y) % 欧氏距离矩阵Z = linkage(Y) % 最短距离法T = cluster(Z,3) 等价于 T=clusterdata(X,3) find(T=3) % 第 3 类集合中的元素H,T=dendrogram(Z) % 画聚类图聚类谱系图如图 1 所示:1417132212 8 232019 12115 5 2 3 1627 4 182428 6 10 7 3026 925112900.10.20.30.40.50.60.7图 1 聚类谱系图

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号