由距离公式d(;),可以算出距离矩阵。 WI w2 W3 W4 w5 1「01466 0355 04 第一步,所有的元素自成一类H1={v1,w2,W3,4,W3}。每一个类的平台高度为 零,即f()=O(=1,2,345)。显然,这时D(G2,G)=d(wp,g)。 第二步,取新类的平台高度为1,把w1"2合成一个新类h,此时的分类情况是 H2={h,W3,w4,w5 第三步,取新类的平台高度为2,把W3,4合成一个新类/,此时的分类情况是 H3={,h,w3} 第四步,取新类的平台高度为3,把h,h2合成一个新类h,此时的分类情况是 H4={h3,W3} 第五步,取新类的平台高度为4,把h3和5合成一个新类h,此时的分类情况是 H5={} 2w3 图2最短距离法 这样,h已把所有的样本点聚为一类,因此,可以转到画聚类图步骤。画出聚类
-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)。 有了聚类图,就可以按要求进行分类。可以看出,在这五个推销员中w5的工作成 绩最佳,w3,W4的工作成绩最好,而w1,w2的工作成绩较差 完全类似于以上步骤,但以最长距离法来计算类间距离,就称为系统聚类法中的 最长距离法。 计算的 MATLAB程序如下 a=[1,0;1,1;3,2;4,3;2,5] d(i,j) d d min=min(nd) [row, col]=find(d==nd min); tm=union(row, col) s(i)={char(['第',int2str(i),·次合成,平台高度为',num2str( nd min), 时的分类结果为:',int2str(tm)])}; 号上面大括号{}代表建立数组 nd(find (nd==nd min))=[] if length(nd)==0 或者使用 MATLAB统计工具箱的相关命令,编写如下程序: y=pdist(a, ' ');yc=squareform(y) z=linkage(y)
-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) 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 标准欧氏距离 Mahal 马氏距离( Mahalanobis距离) CityBlock 绝对值距离 Minkowski 闵氏距离( Minkowski距离) Y=pdist(X,’ minkowski’,p)用闵氏距离计算矩阵X中对象间的距离。P为闵氏距离 计算用到的指数值,缺省为 2) linkage Z= linkage③Y)使用最短距离算法生成具层次结构的聚类树。输入矩阵Y为 pdist函数 输出的(m-1)·m/2维距离行向量 Z= linkage(Y,’ method’)使用由’ method’指定的算法计算生成聚类 树。’ method’可取表3中特征字符串值。 表3’ method’取值及含义 字符串 single 最短距离(缺省) 最大距离 centroid 重心距离 ward' 离差平方和方法(Ward方法) 输出Z为包含聚类树信息的(m-1)×3矩阵。聚类树上的叶节点为原始数据集中的 对象,由1到m。它们是单元素的类,级别更高的类都由它们生成。对应于Z中行j每 个新生成的类,其索引为m+j,其中m为初始叶节点的数量
-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列,即Z(i,1:2)包含了被两两连接生成一个新类的所有对象的索引。生 成的新类索引为m+j。共有m-1个级别更高的类,它们对应于聚类树中的内部节点。 第三列,Z(i,3)包含了相应的在类中的两两对象间的连接距离。 3) cluster T= cluster(Z, cutoff)从连接输出( linkage)中创建聚类。 cutoff为定义 cluster 函数如何生成聚类的阈值,其不同的值含义如表4所示。 表4 cutoff取值及含义 cutoff.取值 含义 utofff为不一致系数的阈值。不一致系数对聚类树中对象间的差 异进行了量化。如果一个连接的不一致系数大于阙值,则 cluster 函数将其作为聚类分组的边界。 2=cutoff cutoff作为包含在聚类树中的最大分类数 T= cluster(Z, cutoff, depth,flag)从连接输出( linkage)中创建聚类。参数 depth 指定了聚类数中的层数,进行不一致系数计算时要用到。不一致系数将聚类树中两对象 的连接与相邻的连接进行比较。详细说明见函数 inconsistent。当参数 depth被指定时 cutoff通常作为不一致系数阈值。 参数f1ag重载参数 cutoff的缺省含义。如flag为’ inconsistent’,则 cutoff作为 不一致系数的阈值。如f1ag为’ cluster’,则 cutoff作为分类的最大数目。 输出T为大小为m的向量,它用数字对每个对象所属的类进行标识。为了找到包含 在类i中的来自原始数据集的对象,可用find(T==i) 4) sore(X 对数据矩阵进行标准化处理,处理方式为 其中矩阵X=(xn)mxn看作是m个大小为n的向量,xS是每一列的均值和标准差。 5)H=dendrogram(Z, P) 由 linkage产生的数据矩阵Z画聚类树状图。P是结点数,默认值是30 6)T=clusterdata(, cutoff) 将矩阵X的数据分类。X为m×n矩阵,被看作m个大小为n的向量。它与以下几个 命令等价: Y= pdist(X,’ euclid') kage(Y,’ single’) T=cluster (Z, cutoff) 将 pdist的输出转换为方阵
-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,Y)计算相干系数,它是将Z中的距离信息(由 linkage o函数产生) 和Y中的距离信息(由 pdist0)函数产生进行比较。Z为(m-1)×3矩阵,距离信息包 含在第三列。Y是(m-1)·m/2维的行向量 例如,给定距离为Y的一组对象{1,2,…,m},函数1 inkage o生成聚类树。 cophenet o 函数用来度量这种分类的失真程度,即由分类所确定的结构与数据间的拟合程度 输出值c为相干系数。对于要求很高的解,该值的幅度应非常接近1。它也可用来比 较两种由不同算法所生成的分类解。 Z(:,3)和Y之间的相干系数定义为 ∑(y-y)(=n-) (0x-y)∑(=- 其中y为Y中对象i和j间的距离;=为Z(:,3)中对象i和j间的距离;y和=分别为Y 和Z(:,3)的平均距离。 1.3变量聚类法 在实际工作中,变量聚类法的应用也是十分重要的。在系统分析或评估过程中,为 避免遗漏某些重要因素,往往在一开始选取指标时,尽可能多地考虑所有的相关因素 而这样做的结果,则是变量过多,变量间的相关度高,给系统分析与建模带来很大的不 便。因此,人们常常希望能研究变量间的相似关系,按照变量的相似关系把它们聚合成 若干类,进而找出影响系统的主要因素 1.3.1变量相似性度量 在对变量进行聚类分析时,首先要确定变量的相似性度量,常用的变量相似性度量 有两种 1)相关系数 记变量x,的取值(x,x2…xn)∈R"(=12,…,m)则可以用两变量x,与x 的样本相关系数作为它们的相似性度量 (x-xi(xik-xk 在对变量进行聚类分析时,利用相关系数矩阵是最多的
-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) 在对变量进行聚类分析时,利用相关系数矩阵是最多的