聚类分析方法(二)

07-13 1666阅读

目录

    • 三、层次聚类方法
      • (一)层次聚类策略
      • (二)AGNES算法
      • (三)DIANA算法
      • 四、密度聚类方法
        • (一)基本概念
        • (二)算法描述
        • (三)计算实例
        • (四)算法的性能分析

          三、层次聚类方法

          (一)层次聚类策略

            层次聚类方法对给定的数据集进行层次的分解,直到某种条件满足为止。具体又有凝聚的 (agglomerative) 和分裂的 (divisive) 两种策略。

          1、凝聚的层次聚类

            这是一种自底向上的策略,首先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有的对象都在一个簇中,或者某个终结条件被满足,绝大多数层次聚类方法属于这一类,其区别仅在于簇间相似度的选择上有所不同。

          2、分裂的层次聚类

            这个策略与凝聚的层次聚类相反的,为自顶向下的策略,它首先将所有对象放置在同一个簇中,然后逐渐细分为越来越小的簇,直到每个对象自成一簇,或者达到了某个终止条件。

            层次凝聚的代表是AGNES (AGglomerative NESting) 算法,层次分裂的代表是DIANA (DIvisive ANAlysis) 算法。图10-15描述了对5个数据对象进行层次聚类计算过程。

          聚类分析方法(二)

            最初, AGNES将每个对象作为一个簇,然后根据某种准则 (簇间距离最近或簇间相似度最大),将这些簇一步一步地合并成较大的簇。例如,如果簇 C 1 C_1 C1​与簇 C 2 C_2 C2​之间的距离,比其他任意两个簇的距离都小,则将 C 1 C_1 C1​和 C 2 C_2 C2​合并为一个簇。合并后的簇与其他簇同等看待,继续寻找簇间距离最小的两个簇,并将其合并,直到所有的对象最终都在一个簇中。

            在DIANA算法的处理过程中,所有的对象开始都放在一个簇中,然后根据某种原则将该簇分裂,其分裂过程反复进行,直到每个新的簇只包含一个对象为止。

          (二)AGNES算法

          1、算法描述

            AGNES算法是一个典型的凝聚层次聚类方法:最初将每个对象作为一个簇,再根据某种准则 (簇间距离或相似度),将这些簇逐渐合并成较大的簇,直到所有数据对象都在同一个簇或簇数达到用户指定数目。

            簇的凝聚准则可以选择簇间最短距离、最长距离、中心距离和平均距离等。以下算法采用簇间中心距离为目标函数。

          算法10-5 AGNES算法 (凝聚层次算法)

          输入:数据集 S = { X 1 , X 2 , ⋯   , X n } S=\{X_1,X_2,\cdots,X_n\} S={X1​,X2​,⋯,Xn​}和正整数 k k k (簇的数目)

          输出:含 k k k个簇的一个聚类 C = { C 1 , C 2 , ⋯   , C k } C=\{C_1,C_2,\cdots,C_k\} C={C1​,C2​,⋯,Ck​}

          (1)将 S S S的每个对象当成一个初始簇,形成初始聚类 C C C

          (2)REPEAT

          (3) 找出中心距离最近的两个簇

          (4) 合并这两个簇,并生成新的聚类 C C C

          (5)UNTIL簇的数目等于 k k k

          2、计算实例

          例10-5 设 S S S为有8个数据对象的数据集 S S S (表10-5),用户需要的簇数 k = 2 k=2 k=2。试用AGNES算法对其进行划分聚类。

          聚类分析方法(二)

          解:首先将表10-15各个点的位置在二维平面给出。如下图10-17。

          聚类分析方法(二)

          根据算法10-5,因为 S S S有8个数据对象,因此,刚开始每个对象为一个簇,详见下表10-6。

          计算步骤最近距离最近的两个簇合并后的簇簇的个数
          0 { X 1 } , { X 2 } , { X 3 } , { X 4 } , { X 5 } , { X 6 } , { X 7 } , { X 8 } \{X_1\},\{X_2\},\{X_3\},\{X_4\},\{X_5\},\{X_6\},\{X_7\},\{X_8\} {X1​},{X2​},{X3​},{X4​},{X5​},{X6​},{X7​},{X8​}8
          11 { X 1 } , { X 2 } \{X_1\},\{X_2\} {X1​},{X2​} { X 1 , X 2 } , { X 3 } , { X 4 } , { X 5 } , { X 6 } , { X 7 } , { X 8 } \{X_1,X_2\},\{X_3\},\{X_4\},\{X_5\},\{X_6\},\{X_7\},\{X_8\} {X1​,X2​},{X3​},{X4​},{X5​},{X6​},{X7​},{X8​}7
          21 { X 3 } , { X 4 } \{X_3\},\{X_4\} {X3​},{X4​} { X 1 , X 2 } , { X 3 , X 4 } , { X 5 } , { X 6 } , { X 7 } , { X 8 } \{X_1,X_2\},\{X_3,X_4\},\{X_5\},\{X_6\},\{X_7\},\{X_8\} {X1​,X2​},{X3​,X4​},{X5​},{X6​},{X7​},{X8​}6
          3 { X 1 , X 2 } , { X 3 , X 4 } \{X_1,X_2\},\{X_3,X_4\} {X1​,X2​},{X3​,X4​} { X 1 , X 2 , X 3 , X 4 } , { X 5 } , { X 6 } , { X 7 } , { X 8 } \{X_1,X_2,X_3,X_4\},\{X_5\},\{X_6\},\{X_7\},\{X_8\} {X1​,X2​,X3​,X4​},{X5​},{X6​},{X7​},{X8​}5
          41 { X 5 } , { X 6 } \{X_5\},\{X_6\} {X5​},{X6​} { X 1 , X 2 , X 3 , X 4 } , { X 5 , X 6 } , { X 7 } , { X 8 } \{X_1,X_2,X_3,X_4\},\{X_5,X_6\},\{X_7\},\{X_8\} {X1​,X2​,X3​,X4​},{X5​,X6​},{X7​},{X8​}4
          51 { X 7 } , { X 8 } \{X_7\},\{X_8\} {X7​},{X8​} { X 1 , X 2 , X 3 , X 4 } , { X 5 , X 6 } , { X 7 , X 8 } \{X_1,X_2,X_3,X_4\},\{X_5,X_6\},\{X_7,X_8\} {X1​,X2​,X3​,X4​},{X5​,X6​},{X7​,X8​}3
          61 { X 5 , X 6 } , { X 7 , X 8 } \{X_5,X_6\},\{X_7,X_8\} {X5​,X6​},{X7​,X8​} { X 1 , X 2 , X 3 , X 4 } , { X 5 , X 6 , X 7 , X 8 } \{X_1,X_2,X_3,X_4\},\{X_5,X_6,X_7,X_8\} {X1​,X2​,X3​,X4​},{X5​,X6​,X7​,X8​}2

          初始步,每个对象为一个簇 { X 1 } , { X 2 } , { X 3 } , { X 4 } , { X 5 } , { X 6 } , { X 7 } , { X 8 } \{X_1\},\{X_2\},\{X_3\},\{X_4\},\{X_5\},\{X_6\},\{X_7\},\{X_8\} {X1​},{X2​},{X3​},{X4​},{X5​},{X6​},{X7​},{X8​}。

          第1步、为方便使用簇间中心距离平方。此例开始时有8个簇,共需计算28个簇间距离平方。但仅有

          d ( X 1 , X 2 ) 2 = d ( X 1 , X 3 ) 2 = d ( X 2 , X 4 ) 2 = d ( X 3 , X 4 ) 2 = 1 d ( X 5 , X 6 ) 2 = d ( X 5 , X 7 ) 2 = d ( X 6 , X 8 ) 2 = d ( X 7 , X 8 ) 2 = 1 d(X_1,X_2)^2= d(X_1,X_3)^2= d(X_2,X_4)^2= d(X_3,X_4)^2= 1\\[2ex]d(X_5,X_6)^2= d(X_5,X_7)^2= d(X_6,X_8)^2= d(X_7,X_8)^2= 1 d(X1​,X2​)2=d(X1​,X3​)2=d(X2​,X4​)2=d(X3​,X4​)2=1d(X5​,X6​)2=d(X5​,X7​)2=d(X6​,X8​)2=d(X7​,X8​)2=1 而其它对象之间的中心距离平方,如 d ( X 1 , X 4 ) 2 、 d ( X 5 , X 8 ) 2 d(X_1,X_4)^2、d(X_5,X_8)^2 d(X1​,X4​)2、d(X5​,X8​)2 等都大于1。

          由于有多个簇间中心距离最小且相等。因此,按照数据对象坐标编号小者顺序优先合并,即选择 { X 1 } , { X 2 } \{X_1\},\{X_2\} {X1​},{X2​} 合并为 { X 1 , X 2 } \{X_1,X_2\} {X1​,X2​}。

          即得7个簇 { X 1 , X 2 } , { X 3 } , { X 4 } , { X 5 } , { X 6 } , { X 7 } , { X 8 } \{X_1,X_2\},\{X_3\},\{X_4\},\{X_5\},\{X_6\},\{X_7\},\{X_8\} {X1​,X2​},{X3​},{X4​},{X5​},{X6​},{X7​},{X8​}

          第2步、重新计算簇 { X 1 , X 2 } \{X_1,X_2\} {X1​,X2​} 的中心点为 C ( 1 ) = ( 1 , 1.5 ) C^{(1)}=(1, 1.5) C(1)=(1,1.5),并增加计算 C ( 1 ) C^{(1)} C(1) 与 { X 3 } , … , { X 8 } \{X_3\},…,\{X_8\} {X3​},…,{X8​} 的距离平方。

          d ( C ( 1 ) , X 3 ) 2 = 1.25 , d ( C ( 1 ) , X 4 ) 2 = 1.25 d(C^{(1)},X_3)^2=1.25, d(C^{(1)},X_4)^2=1.25 d(C(1),X3​)2=1.25,d(C(1),X4​)2=1.25,其它 d ( C ( 1 ) , X 5 ) 2 , … , d ( C ( 1 ) , X 8 ) 2 d(C^{(1)},X_5)^2, …, d(C^{(1)},X_8)^2 d(C(1),X5​)2,…,d(C(1),X8​)2 等都大于1.25。因 d ( X 3 , X 4 ) 2 = 1 d(X_3,X_4)^2=1 d(X3​,X4​)2=1,故簇 { X 3 } \{X_3\} {X3​} 和 { X 4 } \{X_4\} {X4​} 合并为 { X 3 , X 4 } \{X_3,X_4\} {X3​,X4​},见表10-6计算步骤2所在的行。

          第3步、重新计算簇 { X 3 , X 4 } \{X_3,X_4\} {X3​,X4​} 的中心点为 C ( 2 ) = ( 2 , 1.5 ) C^{(2)}=(2, 1.5) C(2)=(2,1.5),并增加计算 C ( 2 ) C^{(2)} C(2) 与 C ( 1 ) , { X 5 } , { X 6 } , { X 7 } , { X 8 } C^{(1)},\{X_5\},\{X_6\},\{X_7\},\{X_8\} C(1),{X5​},{X6​},{X7​},{X8​} 的距离平方。

          d ( C ( 1 ) , C ( 2 ) ) 2 = 1 , d ( C ( 2 ) , X 5 ) 2 = 7.25 d(C^{(1)},C^{(2)})^2=1, d(C^{(2)},X_5)^2=7.25 d(C(1),C(2))2=1,d(C(2),X5​)2=7.25,且 d ( C ( 2 ) , X 6 ) 2 , d ( C ( 2 ) , X 7 ) 2 , d ( C ( 2 ) , X 8 ) 2 d(C^{(2)},X_6)^2,d(C^{(2)},X_7)^2,d(C^{(2)},X_8)^2 d(C(2),X6​)2,d(C(2),X7​)2,d(C(2),X8​)2 更大。因此簇 { X 1 , X 2 } \{X_1,X_2\} {X1​,X2​} 和 { X 3 , X 4 } \{X_3,X_4\} {X3​,X4​} 合并为 { X 1 , X 2 , X 3 , X 4 } \{X_1,X_2,X_3,X_4\} {X1​,X2​,X3​,X4​},见表10-6计算步骤3所在的行。

          第4步、重新计算簇 { X 1 , X 2 , X 3 , X 4 } \{X_1,X_2,X_3,X_4\} {X1​,X2​,X3​,X4​} 的中心点为 C ( 3 ) = ( 1.5 , 1.5 ) C^{(3)}=(1.5, 1.5) C(3)=(1.5,1.5),并增加计算 C ( 3 ) C^{(3)} C(3) 与 { X 5 } , { X 6 } , { X 7 } , { X 8 } \{X_5\},\{X_6\},\{X_7\},\{X_8\} {X5​},{X6​},{X7​},{X8​} 的距离平方。

          d ( C ( 3 ) , X 5 ) 2 = 8.5 d(C^{(3)},X_5)^2=8.5 d(C(3),X5​)2=8.5,且 d ( C ( 3 ) , X 6 ) 2 , d ( C ( 3 ) , X 7 ) 2 , d ( C ( 3 ) , X 8 ) 2 d(C^{(3)},X_6)^2,d(C^{(3)},X_7)^2,d(C^{(3)},X_8)^2 d(C(3),X6​)2,d(C(3),X7​)2,d(C(3),X8​)2 更大。而 d ( X 5 , X 6 ) = 1 d(X_5,X_6)=1 d(X5​,X6​)=1,因此簇 { X 5 } \{X_5\} {X5​} 和 { X 6 } \{X_6\} {X6​} 合并为 { X 5 , X 6 } \{X_5,X_6\} {X5​,X6​},见表10-6计算步骤4所在的行。

          第5步、重新计算簇 { X 5 , X 6 } \{X_5,X_6\} {X5​,X6​} 的中心点为 C ( 4 ) = ( 3 , 4.5 ) C^{(4)}=(3, 4.5) C(4)=(3,4.5),并增加计算 C ( 4 ) C^{(4)} C(4) 与 C ( 3 ) , { X 7 } , { X 8 } C^{(3)},\{X_7\},\{X_8\} C(3),{X7​},{X8​} 的距离平方。

          d ( C ( 4 ) , C ( 3 ) ) 2 = 11.25 d(C^{(4)},C^{(3)})^2=11.25 d(C(4),C(3))2=11.25, d ( C ( 4 ) , X 7 ) 2 = 1.25 , d ( C ( 4 ) , X 8 ) 2 = 1.25 , d(C^{(4)},X_7)^2=1.25,d(C^{(4)},X_8)^2=1.25, d(C(4),X7​)2=1.25,d(C(4),X8​)2=1.25, 而 d ( X 7 , X 8 ) 2 = 1 d(X_7,X_8)^2=1 d(X7​,X8​)2=1。因此簇 { X 7 } \{X_7\} {X7​} 和 { X 8 } \{X_8\} {X8​} 合并为 { X 7 , X 8 } \{X_7,X_8\} {X7​,X8​},见表10-6计算步骤5所在的行。

          第6步、重新计算簇 { X 7 , X 8 } \{X_7,X_8\} {X7​,X8​} 的中心点为 C ( 5 ) = ( 4 , 4.5 ) C^{(5)}=(4, 4.5) C(5)=(4,4.5),并增加计算 C ( 5 ) C^{(5)} C(5) 与 C ( 3 ) , C ( 4 ) , C ( 1 ) C^{(3)},C^{(4)},C^{(1)} C(3),C(4),C(1) 的距离平方。

          d ( C ( 5 ) , C ( 3 ) ) 2 = 11.25 , d ( C ( 5 ) , C ( 4 ) ) 2 = 1 d(C^{(5)},C^{(3)})^2=11.25, d(C^{(5)},C^{(4)})^2=1 d(C(5),C(3))2=11.25,d(C(5),C(4))2=1 而 d ( C ( 5 ) , C ( 1 ) ) 2 = 15.25 d(C^{(5)},C^{(1)})^2=15.25 d(C(5),C(1))2=15.25。因此簇 { X 5 , X 6 } \{X_5,X_6\} {X5​,X6​} 和 { X 7 , X 8 } \{X_7,X_8\} {X7​,X8​} 合并为 { X 5 , X 6 , X 7 , X 8 } \{X_5,X_6,X_7,X_8\} {X5​,X6​,X7​,X8​},见表10-6计算步骤6所在的行。

          由于合并后的簇的数目 k = 2 k=2 k=2 已经达到用户输入的终止条件,程序结束。

          3、算法的性能分析

            AGNES算法思想比较简单,但经常会因为出现多个簇间距离相等的情况,这时究竟选择哪两个簇优先合并是非常关键的,但又是比较困难的。因为两个簇合并的决定一经做出,以后的处理只能在新生成的簇上进行,即使后来发现聚类效果不好,但前面已经做过的合并处理却不能撤销,而每个簇之间又不能交换对象。即如果在某一步对簇进行合并时没有选择恰当,最终可能导致低质量的聚类结果。

            AGNES算法的时间复杂性为 O ( n 2 ) O(n^2) O(n2),因为对 n n n个对象的数据集,算法必须计算所有对象两两之间的距离,其乘法计算量就达到 n ( n − 1 ) / 2 n(n-1)/2 n(n−1)/2。此外,因为刚开始的时候就有 n n n个簇,如果最后以1个簇结束,则主循环中有 n n n次迭代,在第 i i i次迭代中,我们必须在 n − i + 1 n-i+1 n−i+1 个簇中找到最靠近的两个簇进行合并。因此,这种聚类方法不具有很好的可伸缩性,即该算法在 n n n很大的情况就不是很适用。

          (三)DIANA算法

          1、算法描述

            DIANA算法属于分裂的层次聚类。它的计算思路与凝聚的层次聚类方法相反,采用一种自顶向下的分裂策略。它首先将所有对象置于一个簇中,然后逐渐将其细分为越来越小的簇,直到每个对象自成一簇,或者达到了某个终结条件,例如达到了用户希望的簇数目,或者是两个最近簇之间的距离超过了指定的某个阈值等。

            在DIANA算法的处理过程中,刚开始将所有的对象都放在一个簇中,然后根据一定的评价函数将其分裂为两个子簇,其中一个叫原始 (original) 簇,简记为 C s C_s Cs​,另一个叫分裂 (split或divisive) 的子簇,记作 C s C_s Cs​,再从中找出最应该被分裂 (比如,直径最大) 的子簇将其分裂为两个子簇,重复进行这个分裂过程,直到每个子簇中仅包含一个对象,或者已经达到用户指定的终止条件。

            与AGNES算法类似,用户可以在DIANA聚类算法中指定簇的数目 k k k作为算法的一个结束条件。因此,根据算法10-2 (划分聚类算法框架),我们可以得到DIANA算法的详细计算步骤。

          算法10-6 DIANA算法 (分裂层次算法)

          输人:数据对象集 S = { X 1 , X 2 , ⋯   , X n } S=\{X_1,X_2,\cdots,X_n\} S={X1​,X2​,⋯,Xn​}和正整数 k k k (簇的数目)

          输出:含 k k k个簇的聚类 C = { C 1 , C 2 , ⋯   , C k } C=\{C_1,C_2,\cdots,C_k\} C={C1​,C2​,⋯,Ck​}

          (1)将 S S S作为聚类的唯一初始簇,即聚类 C = { S } C=\{S\} C={S}

          (2)FOR h = 1 , 2 , . . . , k − 1 h=1,2,...,k-1 h=1,2,...,k−1

          (3)在聚类 C C C中挑出具有最大直径的簇记作 C o C_o Co​。且令 C s = ∅ C_s=\varnothing Cs​=∅

          (4)计算簇 C o C_o Co​中每个点到其余点的平均距离,找出具有最大平均距离的一个点 X X X,并令 C o = C o − { X } , C s = C s ∪ { X } C_o=C_o-\{X\},C_s=C_s\cup \{X\} Co​=Co​−{X},Cs​=Cs​∪{X}

          (5)REPEAT

          (6)从 C o C_o Co​中任取一点 X o X_o Xo​,计算 X o X_o Xo​到 C s C_s Cs​的最小距离 d s ( X o , C s ) d_s(X_o,C_s) ds​(Xo​,Cs​)

          (7)计算 C o − { X o } C_o-\{X_o\} Co​−{Xo​}到 X o X_o Xo​的最小距离,并记 X r ∈ C o − { x o } X_r\in C_o-\{x_o\} Xr​∈Co​−{xo​}是取得最小距离的点

          (8)若 d s ( X o , C s ) ≤ d ( X o , X r ) d_s(X_o,C_s)≤d(X_o,X_r) ds​(Xo​,Cs​)≤d(Xo​,Xr​),则将 X o X_o Xo​从 C o C_o Co​分裂出去,并分配给 C s C_s Cs​,即令 C o = C o − { X o } , C s = C s ∪ { X o } C_o=C_o-\{X_o\},C_s=C_s\cup\{X_o\} Co​=Co​−{Xo​},Cs​=Cs​∪{Xo​}

          (9)UNTIL集合 C o C_o Co​中没有新的点可以分配给 C s C_s Cs​

          (10)将簇 C o C_o Co​、簇 C s C_s Cs​和 C C C中未被分裂的簇共同组成新的聚类 C C C

          (11)END FOR

          2、计算实例

          例10-6 设 S S S为有8个数据对象的数据集 (例10-5的表10-5),用户需要的簇数 k = 2 k=2 k=2。试用DIANA算法对其进行划分聚类。

          解:根据算法10-6,因为 S S S有8个数据对象,因此,刚开始所有对象作为一个簇 C o = { X 1 , X 2 , X 3 , X 4 , X 5 , X 6 , X 7 , X 8 } C_o=\{X_1,X_2,X_3,X_4,X_5,X_6,X_7,X_8\} Co​={X1​,X2​,X3​,X4​,X5​,X6​,X7​,X8​}。详见下表10-7计算步骤0对应的行。

          计算步骤最大直径的簇 C o C_o Co​ C s C_s Cs​簇个数k
          0 { X 1 , X 2 , X 3 , X 4 , X 5 , X 6 , X 7 , X 8 } \{X_1,X_2,X_3,X_4,X_5,X_6,X_7,X_8\} {X1​,X2​,X3​,X4​,X5​,X6​,X7​,X8​} { X 1 , X 2 , X 3 , X 4 , X 5 , X 6 , X 7 , X 8 } \{X_1,X_2,X_3,X_4,X_5,X_6,X_7,X_8\} {X1​,X2​,X3​,X4​,X5​,X6​,X7​,X8​}1
          1 { X 1 , X 2 , X 3 , X 4 , X 5 , X 6 , X 7 , X 8 } \{X_1,X_2,X_3,X_4,X_5,X_6,X_7,X_8\} {X1​,X2​,X3​,X4​,X5​,X6​,X7​,X8​} { X 2 , X 3 , X 4 , X 5 , X 6 , X 7 , X 8 } \{X_2,X_3,X_4,X_5,X_6,X_7,X_8\} {X2​,X3​,X4​,X5​,X6​,X7​,X8​} { X 1 } \{X_1\} {X1​}1
          2 { X 1 , X 2 , X 3 , X 4 , X 5 , X 6 , X 7 , X 8 } \{X_1,X_2,X_3,X_4,X_5,X_6,X_7,X_8\} {X1​,X2​,X3​,X4​,X5​,X6​,X7​,X8​} { X 3 , X 4 , X 5 , X 6 , X 7 , X 8 } \{X_3,X_4,X_5,X_6,X_7,X_8\} {X3​,X4​,X5​,X6​,X7​,X8​} { X 1 , X 2 } \{X_1,X_2\} {X1​,X2​}1
          3 { X 1 , X 2 , X 3 , X 4 , X 5 , X 6 , X 7 , X 8 } \{X_1,X_2,X_3,X_4,X_5,X_6,X_7,X_8\} {X1​,X2​,X3​,X4​,X5​,X6​,X7​,X8​} { X 4 , X 5 , X 6 , X 7 , X 8 } \{X_4,X_5,X_6,X_7,X_8\} {X4​,X5​,X6​,X7​,X8​} { X 1 , X 2 , X 3 } \{X_1,X_2,X_3\} {X1​,X2​,X3​}1
          4 { X 1 , X 2 , X 3 , X 4 , X 5 , X 6 , X 7 , X 8 } \{X_1,X_2,X_3,X_4,X_5,X_6,X_7,X_8\} {X1​,X2​,X3​,X4​,X5​,X6​,X7​,X8​} { X 5 , X 6 , X 7 , X 8 } \{X_5,X_6,X_7,X_8\} {X5​,X6​,X7​,X8​} { X 1 , X 2 , X 3 , X 4 } \{X_1,X_2,X_3,X_4\} {X1​,X2​,X3​,X4​}1
          5 { X 1 , X 2 , X 3 , X 4 , X 5 , X 6 , X 7 , X 8 } \{X_1,X_2,X_3,X_4,X_5,X_6,X_7,X_8\} {X1​,X2​,X3​,X4​,X5​,X6​,X7​,X8​} { X 5 , X 6 , X 7 , X 8 } \{X_5,X_6,X_7,X_8\} {X5​,X6​,X7​,X8​} { X 1 , X 2 , X 3 , X 4 } \{X_1,X_2,X_3,X_4\} {X1​,X2​,X3​,X4​}2

          初始步:为将 C o C_o Co​中分裂成两个簇,要计算每个对象 X i X_i Xi​到其它对象 X j ( j = 1 , 2 , … , 8 ; i ≠ j ) X_j (j=1, 2, …, 8; i≠j) Xj​(j=1,2,…,8;i=j)的平均相异度。

          第一轮循环 (FOR h=1) 时,

          聚类分析方法(二)

          由于 d a ( { X 1 } , { ⋅ } ) = d a ( { X 8 } , { ⋅ } ) = 2.96 d_a(\{X_1\},\{\cdot\})=d_a(\{X_8\},\{\cdot\})=2.96 da​({X1​},{⋅})=da​({X8​},{⋅})=2.96 取得最大平均距离,按照对象下标编号小者优先的原则,将 X 1 X_1 X1​ 从 C o C_o Co​ 中分裂出去,并分配给 C s C_s Cs​,即得 C s = { X 1 } C_s=\{X_1\} Cs​={X1​}, C o = { X 2 , X 3 , X 4 , X 5 , X 6 , X 7 , X 8 } C_o=\{X_2,X_3,X_4,X_5,X_6,X_7,X_8\} Co​={X2​,X3​,X4​,X5​,X6​,X7​,X8​}。

          内循环REPEAT 包括以下4个步骤:

          第1步(1)从 C o = { X 2 , X 3 , X 4 , X 5 , X 6 , X 7 , X 8 } C_o=\{X_2,X_3,X_4,X_5,X_6,X_7,X_8\} Co​={X2​,X3​,X4​,X5​,X6​,X7​,X8​} 中取一点 X 2 X_2 X2​,计算它到 C s C_s Cs​ 最小距离,经计算可得 d s ( X 2 , C s ) = 1 d_s(X_2,C_s)=1 ds​(X2​,Cs​)=1;

          (2)计算点 X 2 X_2 X2​ 到 C o C_o Co​ 中其它点的最小距离,即有 d ( X 2 , X 4 ) = 1 d(X_2,X_4)=1 d(X2​,X4​)=1;

          (3)因 d ( X 2 , C s ) ≤ d ( X 2 , X 4 ) d(X_2,C_s)≤d(X_2,X_4) d(X2​,Cs​)≤d(X2​,X4​),所以将 X 2 X_2 X2​ 从 C o C_o Co​ 中分裂出去,并分配给 C s C_s Cs​,即得 C o = { X 3 , X 4 , X 5 , X 6 , X 7 , X 8 } C_o=\{X_3,X_4,X_5,X_6,X_7,X_8\} Co​={X3​,X4​,X5​,X6​,X7​,X8​}, C s = { X 1 , X 2 } C_s=\{X_1 , X_2\} Cs​={X1​,X2​}。

          第2步 把 X 3 X_3 X3​ 从 C o C_o Co​ 中分裂出去,并分配给 C s C_s Cs​,即得 C o = { X 4 , X 5 , X 6 , X 7 , X 8 } C_o=\{X_4,X_5,X_6,X_7,X_8\} Co​={X4​,X5​,X6​,X7​,X8​}, C s = { X 1 , X 2 , X 3 } C_s=\{X_1,X_2, X_3\} Cs​={X1​,X2​,X3​}。

          第3步(1)从 C o = { X 4 , X 5 , X 6 , X 7 , X 8 } C_o=\{X_4,X_5,X_6,X_7,X_8\} Co​={X4​,X5​,X6​,X7​,X8​} 取一点 X 4 X_4 X4​,计算它到 C s C_s Cs​ 最小距离,经计算可得 d s ( X 4 , C s ) = 1 d_s(X_4,C_s)=1 ds​(X4​,Cs​)=1;

          (2)计算点 X 4 X_4 X4​ 到 C o C_o Co​ 中其它点的最小距离,即有 d ( X 4 , X 5 ) = 2.24 d(X_4,X_5)=2.24 d(X4​,X5​)=2.24;

          (3)因 d ( X 4 , X 2 ) ≤ d ( X 4 , X 5 ) d(X_4,X_2)≤d(X_4,X_5) d(X4​,X2​)≤d(X4​,X5​),因此把 X 4 X_4 X4​ 从 C o C_o Co​ 中分裂出去,并分配给 C s C_s Cs​,即得 C o = { X 5 , X 6 , X 7 , X 8 } C_o=\{X_5,X_6,X_7,X_8\} Co​={X5​,X6​,X7​,X8​}, C s = { X 1 , X 2 , X 3 , X 4 } C_s=\{X_1, X_2, X_3, X_4\} Cs​={X1​,X2​,X3​,X4​}。

          第4步 按照上面方法,分别计算 X 5 , X 6 , X 7 , X 8 X_5,X_6,X_7,X_8 X5​,X6​,X7​,X8​ 到 C s C_s Cs​ 的最小距离 d s ( X i , C s ) ( i = 5 , 6 , 7 , 8 ) d_s(X_i,C_s) (i=5,6,7,8) ds​(Xi​,Cs​)(i=5,6,7,8),但有 d s ( X i , C s ) > d ( X i , X j ) ( i = 5 , 6 , 7 , 8 ; i ≠ j ) d_s(X_i,C_s)>d(X_i,X_j) (i=5,6,7,8;i≠j) ds​(Xi​,Cs​)>d(Xi​,Xj​)(i=5,6,7,8;i=j),即 C o C_o Co​ 中没有点需要分裂出去分配给 C s C_s Cs​;至此,得到聚类 C = { { X 1 , X 2 , X 3 , X 4 } , { X 5 , X 6 , X 7 , X 8 } } = { C 1 , C 2 } C=\{\{X_1,X_2,X_3,X_4\},\{X_5,X_6,X_7,X_8\}\}=\{C_1,C_2\} C={{X1​,X2​,X3​,X4​},{X5​,X6​,X7​,X8​}}={C1​,C2​}。

          由于 k = 2 k=2 k=2,因此算法结束并输出聚类 C C C,将其与图10-17比较可以发现,这个聚类结果还是相当令人满意的。但是,如果在例10-6中指定 k = 4 k=4 k=4,则算法需要进入第二轮和第三轮循环。

          第二轮循环 (FOR h=2),得聚类 C = { { X 1 , X 2 , X 3 } , { X 4 } , { X 5 , X 6 , X 7 , X 8 } } = { C 1 , C 2 , C 3 } C=\{\{X_1,X_2,X_3\},\{X_4\},\{X_5,X_6,X_7,X_8\}\}=\{C_1,C_2,C_3\} C={{X1​,X2​,X3​},{X4​},{X5​,X6​,X7​,X8​}}={C1​,C2​,C3​}

          第三轮循环 (FOR h=3),得聚类 C = { { X 1 , X 2 } , { X 3 } , { X 4 } , { X 5 , X 6 , X 7 , X 8 } } = { C 1 , C 2 , C 3 , C 4 } C=\{\{X_1,X_2\},\{X_3\},\{X_4\},\{X_5,X_6,X_7,X_8\}\}=\{C_1,C_2,C_3,C_4\} C={{X1​,X2​},{X3​},{X4​},{X5​,X6​,X7​,X8​}}={C1​,C2​,C3​,C4​}。

          即DIANA算法得到了包括4个簇的聚类,算法结束。将以上结果与图10-17比较发现,虽然DIANA算法得到了包括4个簇的聚类,但这个聚类 C = { { X 1 , X 2 } , { X 3 } , { X 4 } , { X 5 , X 6 , X 7 , X 8 } } = { C 1 , C 2 , C 3 , C 4 } C=\{\{X_1,X_2\},\{X_3\},\{X_4\},\{X_5,X_6,X_7,X_8\}\}=\{C_1,C_2,C_3,C_4\} C={{X1​,X2​},{X3​},{X4​},{X5​,X6​,X7​,X8​}}={C1​,C2​,C3​,C4​} 显得很不靠谱,这个例子进一步说明,DIANA算法对k值的选取也是敏感的。

          3、算法的性能分析

            DIANA算法与AGNES算法一样,其时间复杂性为 O ( n 2 ) O(n^2) O(n2),因为对有 n n n个数据对象的数据集,算法也必须计算所有对象两两之间的距离,其乘法计算量就达到 n ( n − 1 ) / 2 n(n-1)/2 n(n−1)/2。因此,这种聚类方法同样不具有很好的可伸缩性,即该算法在 n n n很大的情况就不是很适用。

          四、密度聚类方法

            密度聚类方法的指导思想是,只要一个区域中对象的密度大于某个域值,就把它加到与之相近的簇中去。这种算法可发现任意形状的簇,对噪声数据也不敏感。

            DBSCAN (Density Based Spatial Clustering of Applications with Noise) 是基于密度的聚类算法代表,且是一种部分聚类算法,即聚类 C C C中所有簇的并集不能覆盖数据集 S S S本身。

          (一)基本概念

          定义10-2 给定一个对象集 S S S 和实数 ε > 0 \varepsilon>0 ε>0,则对于任意 X ∈ S X\in S X∈S,称 ε ( X ) = { Y ∣ Y ∈ S , d ( Y , X ) ≤ ε } \varepsilon(X)=\{Y | Y\in S, d(Y,X)≤\varepsilon\} ε(X)={Y∣Y∈S,d(Y,X)≤ε} 为 X X X 在 S S S 中的 ε \varepsilon ε-邻域,简称 X X X 的 ε \varepsilon ε-邻域。

            显然,如果 S S S为在平面上有20个对象的集合,且距离函数采用欧几里距离,则 X X X的 ε \varepsilon ε-邻域是以 X X X为中心, ε \varepsilon ε为半径的圆内所有对象构成。对于图10-19所示的数据集 S S S,其 X X X的 ε \varepsilon ε-邻域就由圆内 (含圆周上) 的8个深色点构成。另外,如果在定义10-2中采用的距离函数 d ( Y , X ) d(Y,X) d(Y,X) 不同,则 X X X在 S S S中的 ε \varepsilon ε-邻域 ε ( X ) \varepsilon(X) ε(X) 也会不同。比如,当 d ( Y , X ) d(Y,X) d(Y,X) 选用切比雪夫距离时, ε ( X ) \varepsilon(X) ε(X) 确定的区域就是一个矩形而不是圆形。因此,我们一般应该根据实际问题的特点选用合适的距离函数。

          聚类分析方法(二)

          定义10-3 对于给定的实数 ε > 0 \varepsilon>0 ε>0 和正整数 MinPts \text{MinPts} MinPts,称 ( ε \varepsilon ε, MinPts \text{MinPts} MinPts) 是为 S S S指定的一个密度,简称 ( ε \varepsilon ε, MinPts \text{MinPts} MinPts) 为密度。

          在DBSCAN算法中,密度 ( ε \varepsilon ε, MinPts \text{MinPts} MinPts) 专门用于刻画一个簇中对象的密集程度,为此引入核心对象的概念。

          定义10-4 对给定的密度 ( ε \varepsilon ε, MinPts \text{MinPts} MinPts) 和任意 X ∈ S X\in S X∈S,若 ε ∣ ( X ) ∣ ≥ MinPts \varepsilon|(X)|≥\text{MinPts} ε∣(X)∣≥MinPts,则称 X X X是 S S S关于密度 ( ε \varepsilon ε, MinPts \text{MinPts} MinPts) 的一个核心点,简称 X X X为核心点 (对象)。

          例10-7 假设给定 ε = 2.5 c m \varepsilon=2.5cm ε=2.5cm, MinPts = 8 \text{MinPts}=8 MinPts=8,则图10-19中的点 X X X就是 S S S的一个核心对象。但如果指定 MinPts = 10 \text{MinPts}=10 MinPts=10,即使 ε \varepsilon ε 取值不变, X X X也不再是 S S S的核心点了。

          定义10-5 ∀ Y , X ∈ S \forall Y, X\in S ∀Y,X∈S,若 X X X是一个核心点且 Y ∈ ε ( X ) Y\in\varepsilon(X) Y∈ε(X),则称点 Y Y Y从 X X X出发关于 ( ε , MinPts ) (\varepsilon,\text{MinPts}) (ε,MinPts) 是直接密度可达的,简称从 X X X到 Y Y Y是直接密度可达的。

          例10-8 根据定义10-5,下图10-20中的对象 Y Y Y从 X X X出发关于 ( ε , MinPts ) (\varepsilon,\text{MinPts}) (ε,MinPts) 是直接密度可达的,即从 X X X到 Y Y Y是直接密度可达的。然而,从 X X X到 Z i ( i = 1 , 2 , 3 ) Z_i (i=1,2,3) Zi​(i=1,2,3) 就不是直接密度可达的。

          聚类分析方法(二)

          定义10-6 如果 S S S存在一个对象链 X 1 , X 2 , … , X n , X 1 = X , X n = Y X_1,X_2, …, X_n,X_1=X,X_n=Y X1​,X2​,…,Xn​,X1​=X,Xn​=Y,且从 X i ( 1 ≤ i ≤ n − 1 ) X_i (1≤i≤n-1) Xi​(1≤i≤n−1) 到 X i + 1 X_{i+1} Xi+1​ 是直接密度可达的,则称从 X X X到 Y Y Y是密度可达的。

          例10-9 对包含21个点的平面数据集 S S S (图10-21),如果密度参数 ε = 2.5 c m \varepsilon=2.5cm ε=2.5cm 且 MinPts = 8 \text{MinPts}=8 MinPts=8,请说明从 X X X到 Y Y Y关于 ( ε , MinPts ) (\varepsilon,\text{MinPts}) (ε,MinPts) 是密度可达的。

          聚类分析方法(二)

          定义10-7 对于任意 Y , Z ∈ S Y,Z\in S Y,Z∈S,如果存在 X ∈ S X\in S X∈S,使从 X X X到 Y Y Y,从 X X X到 Z Z Z都是关于 ( ε , MinPts ) (\varepsilon,\text{MinPts}) (ε,MinPts) 密度可达的,则称 Y Y Y和 Z Z Z关于 ( ε , MinPts ) (\varepsilon,\text{MinPts}) (ε,MinPts) 是密度相连的。

          聚类分析方法(二)

          定义10-8 设有对象集 S S S,若它的非空子集 C o C_o Co​满足以下条件:

          (1)对于任意 X , Y ∈ S X,Y\in S X,Y∈S,如果 X ∈ C o X\in C_o X∈Co​,且从 X X X到 Y Y Y关于 ( ε , MinPts ) (\varepsilon,\text{MinPts}) (ε,MinPts) 是密度可达的,则 Y ∈ C o Y\in C_o Y∈Co​;

          (2)对于任意 X , Y ∈ C o X,Y\in C_o X,Y∈Co​,则 X X X和 Y Y Y关于 ( ε , MinPts ) (\varepsilon,\text{MinPts}) (ε,MinPts) 是密度相连的,则称 C o C_o Co​是一个关于密度 ( ε , MinPts ) (\varepsilon,\text{MinPts}) (ε,MinPts) 的簇,简称 C o C_o Co​是基于密度的簇。

          从定义10-8可知,一个基于密度的簇是基于密度可达性的最大的密度相连对象的集合。

          定义10-9 对于任意 Y ∈ S Y\in S Y∈S,若 Y Y Y不是关于密度 ( ε , MinPts ) (\varepsilon,\text{MinPts}) (ε,MinPts) 的核心点,但存在核心点 X X X,使 Y ∈ ε ( X ) Y\in \varepsilon(X) Y∈ε(X),则称 Y Y Y为 S S S边界点。

          定义10-10 对于意 Y ∈ S Y\in S Y∈S,如果 Y Y Y既不是关于密度 ( ε , MinPts ) (\varepsilon,\text{MinPts}) (ε,MinPts) 核心点,也不是边界点,则称 Y Y Y为 S S S关于密度 ( ε , MinPts ) (\varepsilon,\text{MinPts}) (ε,MinPts) “噪声”点,简称 Y Y Y为 S S S的噪声点。

          从定义10-10可知, S S S的一个对象 Y Y Y是否为噪声点,完全与给定的密度 ( ε , MinPts ) (\varepsilon,\text{MinPts}) (ε,MinPts) 相关。一般地说,若 Y Y Y关于 ( ε , MinPts ) (\varepsilon,\text{MinPts}) (ε,MinPts) 为噪声点,则只要让 ε \varepsilon ε足够大,或适当减小 MinPts \text{MinPts} MinPts,就可以使 Y Y Y不再是噪声点。

          根据以上定义,我们可以得出以下两个有用的定理。

          定理10-1 对于任意 X ∈ S X\in S X∈S,如果 X X X是一个核心点,即 ∣ ε ( X ) ∣ ≥ MinPts |\varepsilon(X)|≥\text{MinPts} ∣ε(X)∣≥MinPts,则集合

          C X = { Y ∣ Y ∈ S 且从 X 到 Y 关于 ( ε , MinPts ) 是密度可达的 } C_X=\{Y | Y\in S且从X到Y关于(\varepsilon,\text{MinPts})是密度可达的\} CX​={Y∣Y∈S且从X到Y关于(ε,MinPts)是密度可达的} 称为 S S S上一个关于密度 ( ε , MinPts ) (\varepsilon,\text{MinPts}) (ε,MinPts) 的簇。

          此定理其实是一个关于密度 ( ε , MinPts ) (\varepsilon,\text{MinPts}) (ε,MinPts) 的簇的生成方法,即由核心对象 X X X及其所有从 X X X密度可达对象 Y Y Y所构成的集合,就是一个关于密度 ( ε , MinPts ) (\varepsilon,\text{MinPts}) (ε,MinPts) 的簇,我们将其称为由核心对象 X X X生成的簇。

          定理10-2 设 C o C_o Co​为一个关于密度 ( ε , MinPts ) (\varepsilon,\text{MinPts}) (ε,MinPts) 的簇, X ∈ C o 且 ε ∣ ( X ) ∣ ≥ MinPts X\in C_o且\varepsilon|(X)|≥\text{MinPts} X∈Co​且ε∣(X)∣≥MinPts,则

          C o = { Y ∣ Y ∈ S 且从 X 到 Y 关于 ( ε , MinPts ) 是密度可达的 } C_o=\{Y | Y\in S且从X到Y关于(\varepsilon,\text{MinPts})是密度可达的\} Co​={Y∣Y∈S且从X到Y关于(ε,MinPts)是密度可达的} 此定理进一步说明,一个关于密度 ( ε , MinPts ) (\varepsilon,\text{MinPts}) (ε,MinPts) 的簇 C o C_o Co​,都等同于它的任一核心对象 X X X生成的簇。

          (二)算法描述

            DBSCAN算法通过检查数据集 S S S中每个点 X X X的 ε \varepsilon ε-邻域 ε ( X ) \varepsilon(X) ε(X) 来寻找一个由 X X X生成的簇。对于每一个 X ∈ S X\in S X∈S,如果有 ε ( X ) ≥ MinPts \varepsilon(X)≥\text{MinPts} ε(X)≥MinPts,则创建一个以 X X X为核心点的新簇,并将从 X X X密度可达的所有对象并入这个新簇,直到没有任何新的点可以添加到这个簇时,才开始检查 S S S中下一个点,直到 S S S中的每个点都已经检查完毕。

          算法10-7 DBSCAN算法

          输入:数据对象集 S = { X 1 , X 2 , … , X n } S=\{X_1,X_2,…,X_n\} S={X1​,X2​,…,Xn​}和密度 ( ε , MinPts ) (\varepsilon,\text{MinPts}) (ε,MinPts)

          输出:达到密度要求的聚类 C = { C 1 , C 2 , . . . , C k } C=\{C_1,C_2,...,C_k\} C={C1​,C2​,...,Ck​}

          (1) C = ∅ C=\varnothing C=∅

          (2)REPEAT

          (3)从数据集 S S S中抽取一个未处理过的对象 X u X_u Xu​

          (4)如果 X u X_u Xu​是核心对象且名,不在 C C C的任何簇中,则将 X u X_u Xu​连同从它出发密度可达的所有对象形成簇 C u C_u Cu​,并令 C = C ∪ { C u } C=C\cup\{C_u\} C=C∪{Cu​}

          (5)否则转第 (2) 步

          (6)UNTIL所有对象都被处理

          (三)计算实例

          例10-10 设数据集 S S S共有12个对象,密度 ( ε = 1 , MinPts = 4 ) (\varepsilon=1, \text{MinPts}=4) (ε=1,MinPts=4)。试用DBSCAN算法对其进行聚类。

          聚类分析方法(二)

          解:将12个对象及其相对位置展示在平面上 (图10-25)。

          聚类分析方法(二)

          按照算法步骤,依次选择 S S S中的点 X i X_i Xi​,并检查它是否为关于密度 ( ε = 1 , MinPts = 4 ) (\varepsilon=1, \text{MinPts}=4) (ε=1,MinPts=4) 的核心点,如果是则将 X i ( i = 1 , 2 , … , 12 ) X_i (i=1,2,…,12) Xi​(i=1,2,…,12) 以及所有从它密度可达的点形成一个新簇。其详细计算过程描述如下。

          第1步,在 S S S中选择一点 X 1 X_1 X1​,由于以 X 1 X_1 X1​为中心, ε = 1 \varepsilon=1 ε=1半径的圆内仅包含2个点 { X 1 , X 4 } \{X_1,X_4\} {X1​,X4​},即 ε ( X 1 ) = 2

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]