由距离公式d(,),可以算出距离矩阵 「01466] 0355 024 04 第一步,所有的元素自成一类H,={,m2,W,w4,W}。每一个类的平台高度为 零,即fw,)=0i=l,23,4,5).显然,这时D(Gp,G,)=d(wpw,。 第二步,取新类的平台高度为1,把,合成一个新类。,此时的分类情况是 H2={hs,w3,w4,p} 第三步,取新类的平台高度为2,把州,W4合成一个新类h,此时的分类情况是 H3={h,h,w} 第四步,取新类的平台高度为3,把h,h,合成一个新类,此时的分类情况是 H=h ws) 第五步,取新类的平台高度为4,把人和,合成一个新类九,此时的分类情况是 H={h} 图2最短距离法 这样,么已把所有的样本点聚为一类,因此,可以转到画聚类图步骤。画出聚类
-448- 由距离公式 d(⋅,⋅) ,可以算出距离矩阵。 ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ 4 0 4 0 2 4 0 3 5 5 0 1 4 6 6 5 4 3 2 1 1 2 3 4 5 w w w w w w w w w w 第一步,所有的元素自成一类 { , , , , } H1 = w1 w2 w3 w4 w5 。每一个类的平台高度为 零,即 f (w ) = 0(i = 1,2,3,4,5) i 。显然,这时 ( , ) ( , ) D Gp Gq = d wp wq 。 第二步,取新类的平台高度为 1,把 1 2 w ,w 合成一个新类 h6 ,此时的分类情况是 { , , , } H2 = h6 w3 w4 w5 第三步,取新类的平台高度为 2,把 3 4 w ,w 合成一个新类h7 ,此时的分类情况是 { , , } H3 = h6 h7 w5 第四步,取新类的平台高度为 3,把 6 7 h , h 合成一个新类 h8 ,此时的分类情况是 { , } H4 = h8 w5 第五步,取新类的平台高度为 4,把 h8 和 w5 合成一个新类 h9 ,此时的分类情况是 { } H5 = h9 图 2 最短距离法 这样, h9 已把所有的样本点聚为一类,因此,可以转到画聚类图步骤。画出聚类
图(如图2(a)。这是一颗二义树,如图2(b)。 有了聚类图,就可以按要求进行分类。可以看出,在这五个推销员中W,的工作成 绩最佳,的工作成绩最好,而,W的工作成绩较差。 完全类似于以上步骤,但以最长距离法来计算类间距离,就称为系统聚类法中的 最长距离法。 计算的MATLAB程序如下: clc,clear a=[1,0:1,1:3,2;4,3:2,5] [m,n]=s1ze(a】 d=zeros(m,m); for i=1:m for j-i+1:m d(i,j)-mandist (a(i,:),a(j,:)'); nd end d nd=u ad,nd) for1-1:m-1 nd min=min(nd); [row,col]=find(d==nd_min);tm=union(row,col); tm-reshape(tm,1,length(tm)); 时的类蜡L逸,2st江次合减¥台商度为,a28t红ad0 'int2str (tm)] 鲁上面大括号{)代表建立数组 nd(find(nd==nd_min))=[]; if length(nd)==0 break en end s(:) 或者使用MATLAB统计工具箱的相关命令,编写如下程序: clc clear a=[1,0:1,1:3,2:4,3:2,51: y-pdist(a,'cityblock');yc-squareform(y) z=linkage(y) [h,t]-dendrogram(2) -449
-449- 图(如图 2(a))。这是一颗二叉树,如图 2(b)。 有了聚类图,就可以按要求进行分类。可以看出,在这五个推销员中 w5 的工作成 绩最佳, 3 4 w ,w 的工作成绩最好,而 1 2 w ,w 的工作成绩较差。 完全类似于以上步骤,但以最长距离法来计算类间距离,就称为系统聚类法中的 最长距离法。 计算的 MATLAB 程序如下: clc,clear a=[1,0;1,1;3,2;4,3;2,5]; [m,n]=size(a); d=zeros(m,m); for i=1:m for j=i+1:m d(i,j)=mandist(a(i,:),a(j,:)'); end end d nd=nonzeros(d); nd=union(nd,nd) for i=1:m-1 nd_min=min(nd); [row,col]=find(d==nd_min);tm=union(row,col); tm=reshape(tm,1,length(tm)); s(i)={char(['第',int2str(i),'次合成,平台高度为',num2str(nd_min),' 时的分类结果为:',int2str(tm)])}; %上面大括号{}代表建立数组 nd(find(nd==nd_min))=[]; if length(nd)==0 break end end s(:) 或者使用MATLAB统计工具箱的相关命令,编写如下程序: clc,clear a=[1,0;1,1;3,2;4,3;2,5]; y=pdist(a,'cityblock');yc=squareform(y) z=linkage(y) [h,t]=dendrogram(z)
MATLAB中相关命令的使用说明如下: 1)ndist Y=pdist()计算m×n矩阵x(被看作m个大小为n的向量)中两两对象间的欧氏 距离。对于有m个对象组成的数据集,共有(m-)m/2个两两对象组合。 输出Y是包含距离信息的长度为(m-1)-m/2的向量。可用squareforme函数将此向 量转换为方阵,这样可使矩阵中的元素(1,j)对应原始数据集中对象i和问的距离, (=ndist (Y tric')中用'metric'指定的方法计算矩阵X中对象间的距 离。 'metric' 可取表2中特征字符串值 表2”etric'取值及含义 字符用 含义 ’Buclid' 欧氏距离(缺省) SEuclid' 标准欧氏距离 Mahal 马氏距离(ahalanobis距离) CityBlock' 绝对值距离 ’Minkowski 闵氏距离(inkowski距离) Y=pdist(,'minkowski',p)用闵氏距离计算矩阵X中对象间的距离.P为闵氏距离 计算用到的指数值,缺省为2。 2)linkage Z=1 inkage()使用最短距离算法生成具层次结构的聚类树,输入矩阵y为pdisti函数 输出的(m-1)·m/2维距离行向量 Z-linkage(化,’method')使用由'method'指定的算法计算生成聚类 树。’method'可取表3中特征字符串值。 表3,ethod'取值及含义 含义 single 最短距离(缺省 complete' 最大距离 'average' 平均距离 cent oid' 重心距肉 ward 离差平方和方法(Ward方法) 输出Z为包含聚类树信息的(m一1)×3矩阵。聚类树上的叶节点为原始数据集中的 对象,由1到m。它们是单元素的类,级别更高的类都由它们生成。对应于Z中行j每 个新生成的类,其索引为m+了,其中m为初始叶节点的数量。 450
-450- MATLAB中相关命令的使用说明如下: 1)pdist Y=pdist(X)计算 m× n 矩阵X(被看作 m 个大小为n 的向量)中两两对象间的欧氏 距离。对于有 m 个对象组成的数据集,共有(m −1)⋅ m / 2个两两对象组合。 输出Y是包含距离信息的长度为(m −1)⋅ m / 2的向量。可用squareform函数将此向 量转换为方阵,这样可使矩阵中的元素(i,j)对应原始数据集中对象i和j间的距离。 Y=pdist(X,’metric’)中用’metric’指定的方法计算矩阵X中对象间的距 离。’metric’可取表2中特征字符串值。 表2 ’metric’取值及含义 字符串 含 义 ’Euclid’ 欧氏距离(缺省) ’SEuclid’ 标准欧氏距离 ’Mahal’ 马氏距离(Mahalanobis距离) ’CityBlock’ 绝对值距离 ’Minkowski’ 闵氏距离(Minkowski距离) Y=pdist(X,’minkowski’,p)用闵氏距离计算矩阵X中对象间的距离。P为闵氏距离 计算用到的指数值,缺省为2。 2)linkage Z=linkage(Y)使用最短距离算法生成具层次结构的聚类树。输入矩阵Y为pdist函数 输出的(m −1)⋅ m / 2维距离行向量。 Z=linkage(Y,’method’)使用由’method’指定的算法计算生成聚类 树。’method’可取表3中特征字符串值。 表3 ’method’取值及含义 字符串 含 义 ’single’ 最短距离(缺省) ’complete’ 最大距离 ’average’ 平均距离 ’centroid’ 重心距离 ’ward’ 离差平方和方法(Ward方法) 输出Z为包含聚类树信息的(m −1)×3矩阵。聚类树上的叶节点为原始数据集中的 对象,由1到m 。它们是单元素的类,级别更高的类都由它们生成。对应于Z中行 j 每 个新生成的类,其索引为 m + j ,其中 m 为初始叶节点的数量
第1列和第2列,即2(住,1:2)包含了被两两连接生成一个新类的所有对象的索引。生 成的新类索引为m+了。共有m-1个级别更高的类,它们对应于聚类树中的内部节点。 第三列,Z(1,3)包含了相应的在类中的两两对象间的连接距离 3)cluster T=cluster(亿,cutoff)从连接输出(linkage)中创建聚类。cutoff为定义cluster 函数如何生成聚类的阀值,其不同的值含义如表4所示。 表4 cutoff取值及含义 cutoff取值 义 cutoff作为不一一致系数的阀值.不一致系数对聚类树中对象间的差 (cutoff<2 异进行了量化。如果一个连接的不一致系数大于阔值,则cluster 函数将其作为聚类分组的边界。 2-cutoff cutoff作为包含在聚类树中的最大分类数 T=cluster(亿,cutoff,depth,flag)从连接输出(1 inkage)中创建聚类。参数depth 指定了聚类数中的层数,进行不一致系数计算时要用到。不一致系数将聚类树中两对象 的连接与相邻的连接讲行比较。详细说明见函救inconsistent。当参数depth被指定时 cutoffi通常作为不 致系数胡值 参数flag重载参数cutofff的缺省含义。如flag为' inconsistent ,则cutoff作为 不一致系数的阙值。如flag为'cluster',则cutoff作为分类的最大数目。 输出T为大小为m的向量,它用数字对每个对象所属的类进行标识。为了找到包含 在类i中的来自原始数据集的对象,可用find(T=i)。 4)2s0re(X0 对数据矩阵进行标准化处理,处理方式为 元=专~术 其中矩阵X=(xy)m看作是m个大小为n的向量,元,S,是每一列的均值和标准差。 5)H=dendrogram(亿,P) 由1 inkager产生的数据矩阵Z画聚类树状图。P是结点数,默认值是30。 6)T=clusterdata(优,cutoff) 将矩阵X的数据分类。X为m×n矩阵,被看作m个大小为n的向量。它与以下几个 命令等价: Y=pdist(X.'euclid') 2=linkage (Y,'single') T=cluster(亿,cutoff) 7)squareform 将pdist的输出转换为方阵 451
-451- 第1列和第2列,即Z(i,1:2)包含了被两两连接生成一个新类的所有对象的索引。生 成的新类索引为 m + j 。共有 m −1个级别更高的类,它们对应于聚类树中的内部节点。 第三列,Z(i,3)包含了相应的在类中的两两对象间的连接距离。 3)cluster T=cluster(Z,cutoff)从连接输出(linkage)中创建聚类。cutoff为定义cluster 函数如何生成聚类的阈值,其不同的值含义如表4所示。 表4 cutoff取值及含义 cutoff取值 含 义 0<cutoff<2 cutoff作为不一致系数的阈值。不一致系数对聚类树中对象间的差 异进行了量化。如果一个连接的不一致系数大于阈值,则cluster 函数将其作为聚类分组的边界。 2<=cutoff cutoff作为包含在聚类树中的最大分类数 T=cluster(Z,cutoff,depth,flag)从连接输出(linkage)中创建聚类。参数depth 指定了聚类数中的层数,进行不一致系数计算时要用到。不一致系数将聚类树中两对象 的连接与相邻的连接进行比较。详细说明见函数inconsistent。当参数depth被指定时, cutoff通常作为不一致系数阈值。 参数flag重载参数cutoff的缺省含义。如flag为’inconsistent’,则cutoff作为 不一致系数的阈值。如flag为’cluster’,则cutoff作为分类的最大数目。 输出T为大小为 m 的向量,它用数字对每个对象所属的类进行标识。为了找到包含 在类i中的来自原始数据集的对象,可用find(T==i)。 4)zsore(X) 对数据矩阵进行标准化处理,处理方式为 j ij j ij s x x x − = ~ 其中矩阵 ij m n X x = × ( ) 看作是 m 个大小为n 的向量, j j x ,s 是每一列的均值和标准差。 5)H=dendrogram(Z,P) 由linkage产生的数据矩阵Z画聚类树状图。P是结点数,默认值是30。 6)T=clusterdata(X,cutoff) 将矩阵X的数据分类。X为 m× n 矩阵,被看作 m 个大小为n 的向量。它与以下几个 命令等价: Y=pdist(X,’euclid’) Z=linkage(Y,’single’) T=cluster(Z,cutoff) 7)squareform 将pdist的输出转换为方阵
8)cophenet c=cophenet(亿,)计算相干系数,它是将Z中的距离信息(由1 inkage(0函数产生) 和Y中的距离信息(由pdist0)函数产生进行比较。Z为(m-1)×3矩阵,距离信息包 含在第三列。Y是(m-1)m/2维的行向量。 例如,给定距离为Y的一组对象{L,2,m,函数1 inkage0生成聚类树。cophenet0 函数用来度量这种分类的失真程度,即由分类所确定的结构与数据间的拟合程度。 输出值为相干系数。对于要求很高的解,该值的幅度应非常接近1。它也可用来比 较两种由不同算法所生成的分类解。 Z(:,3)和Y之间的相干系数定义为 ∑y,-y,-) cs 20,-r-可 其中y为Y中对象i和j间的距离:二g为2(:,3)中对象i和j间的距离:y和z分别为Y 和Z(:,3)的平均距离。 1.3变量聚类法 在实际工作中,变量聚类法的应用也是十分重要的。在系统分析或评估过程中,为 避免遗漏某些重要因素,往往在一开始选取指标时,尽可能多地考虑所有的相关因素。 而这样做的结果,则是变量过多,变量间的相关度高,给系统分析与建模带来很大的不 便。因此,人们常常希望能研究变量间的相似关系,按照变量的相似关系把它们聚合成 若干类,进而找出影响系统的主要因素 1.3.1变量相似性度量 在对变量进行聚类分析时,首先要确定变量的相似性度量,常用的变量相似性度量 有两种 1)相关系数 记变量x,的取值(,x2,x)》∈R“U=1,2,m).则可以用两变量x,与x 的样本相关系数作为它们的相似性度量 -) TA= (10) 空-空-月 在对变量进行聚类分析时,利用相关系数矩阵是最多的。 459-
-452- 8)cophenet c=cophenet(Z,Y) 计算相干系数,它是将Z中的距离信息(由linkage()函数产生) 和Y中的距离信息(由pdist())函数产生进行比较。Z为(m −1)×3矩阵,距离信息包 含在第三列。Y是(m −1)⋅ m / 2维的行向量。 例如,给定距离为Y的一组对象{1,2,",m},函数linkage()生成聚类树。cophenet() 函数用来度量这种分类的失真程度,即由分类所确定的结构与数据间的拟合程度。 输出值c为相干系数。对于要求很高的解,该值的幅度应非常接近1。它也可用来比 较两种由不同算法所生成的分类解。 Z(:,3)和Y之间的相干系数定义为 ∑ ∑ ∑ < < < − − − − = i j ij i j ij i j ij ij y y z z y y z z c 2 2 ( ) ( ) ( )( ) 其中 ij y 为Y中对象i 和 j 间的距离; ij z 为Z(:,3)中对象i 和 j 间的距离;y 和 z 分别为Y 和Z(:,3)的平均距离。 1.3 变量聚类法 在实际工作中,变量聚类法的应用也是十分重要的。在系统分析或评估过程中,为 避免遗漏某些重要因素,往往在一开始选取指标时,尽可能多地考虑所有的相关因素。 而这样做的结果,则是变量过多,变量间的相关度高,给系统分析与建模带来很大的不 便。因此,人们常常希望能研究变量间的相似关系,按照变量的相似关系把它们聚合成 若干类,进而找出影响系统的主要因素。 1.3.1 变量相似性度量 在对变量进行聚类分析时,首先要确定变量的相似性度量,常用的变量相似性度量 有两种。 1)相关系数 记变量 j x 的取值( , , , ) ( 1,2, , ) x1 x2 x R j m T n j j " nj ∈ = " 。则可以用两变量 j x 与 k x 的样本相关系数作为它们的相似性度量 2 1 1 1 2 2 1 ( ) ( ) ( )( ) ⎥ ⎦ ⎤ ⎢ ⎣ ⎡ − − − − = ∑ ∑ ∑ = = = n i n i ij j ik k n i ij j ik k jk x x x x x x x x r , (10) 在对变量进行聚类分析时,利用相关系数矩阵是最多的