# N/ f- f1 i' h1.1 划分方法(partitioning method) * o& g g+ p& U" p) \7 i* c 3 M7 ~' h# e, V. A$ T3 [划分方法首先根据给定要构建划分的数目k创建一个初始划分,然后采用一种迭代的重定位技术,尝试通过对象在划分间移动来改进划分。一个好的划分的一般准则是:在同一类中的对象之间尽可能“接近”或相关,而不同类中的对象之间尽可能“远离”或不同。为了达到全局最优,基于划分的聚类会要求穷举所有可能的划分。实际上,绝大多数应用采用了以下两个比较流行的启发式方法:0 Z' S4 x& |: A" M
$ G+ r- J% | G8 d. h- t4 }5 [8 d
(a)K-平均(K-MEANS)算法,在该算法中,每个簇用该簇中对象的平均值来表示。( f# ? u& A( K( G# G
2 y$ D" Z/ J- z1 b5 `2 _/ c. ?- k% D(b)K-中心点(K-MEDOIDS)算法,在该算法中,每个簇用接近聚类中心的一个对象来表示。 * s7 t0 u Y# t8 m3 V. M; F4 p7 p- d$ y( o& W
1. K-means算法! Y, {' a* j* n5 ?% u) I
5 @0 w1 c* o- D/ T
K-means算法首先随机选择k个对象,每个对象代表一个聚类的质心。对于其余的每一个对象,根据该对象与各聚类质心之间的距离,把它分配到与之最相似的聚类中。然后,计算每个聚类的新质心。重复上述过程,直到准则函数会聚。通常采用的准则函数是平方误差准则函数。 n4 U- {& S! m9 S # W; ^+ p c8 b- s 6 F2 I5 d S/ T9 ]" ^8 d% X2 ^K-means聚类算法的具体步骤如下: + U+ q( C5 S H: M9 t2 ]9 {5 X& m) j3 w
1) 从数据集中选择k个质心C1,C2,… ,Ck作为初始的聚类中心; ' |8 l, Z) l* \4 n; i7 J; g* v$ g( E0 z) l! _6 k
2) 把每个对象分配到与之最相似的聚合。每个聚合用其中所有对象的均值来代表,“最相似”就是指距离最小。对于每个点Vi,找出一个质心Cj,使它们之间的距离d(Vj,Cj)最小,并把Vi分配到第j组;, f; r8 e8 C; m8 z
. }) F! `. y$ a3) 把所有的点都分配到相应的组之后,重新计算每个组的质心Cj; , @9 \+ A9 d9 H* t, Z ! P- @& C) f9 q% |4) 循环执行第2)步和第3)步,直到数据的划分不再发生变化。 " w0 Z. B9 h! C- w4 q* T' [ : x& c* l; l' K. m% Z! X该算法具有很好的可伸缩性,其计算复杂度为O(nkt),其中,t是循环的次数。K-means聚类算法的不足之处在于它要多次扫描数据库,此外,它只能找出球形的类,而不能发现任意形状的类。还有,初始质心的选择对聚类结果有较大的影响,该算法对噪声很敏感。; B1 j* d6 Y( u4 w! T1 ]8 y8 T
8 \' S, y F9 R9 R4 y
2. K-medoids算法- ~ v: q8 d, e: ~0 Q3 a
+ W2 x+ n$ _& I! E6 s) k
K-medoids算法的过程和上述k-means的算法过程相似,唯一不同之处是:k-medoids算法用类中最靠近中心的一个对象来代表该聚类,而k-means算法用质心来代表聚类。在k-means算法中,对噪声非常敏感,因为一个极大的值会对质心的计算带来很大的影响。而k-medoid算法中,通过用中心来代替质心,可以有效地消除该影响。8 I& \ S8 D& e6 Y9 C
! X1 X/ p& D; T7 \6 n
K-medoids算法首先随机选择k个对象,每个对象代表一个聚类,把其余的对象分别分配给最相似的聚类。然后,尝试把每个中心分别用其他非中心来代替,检查聚类的质量是否有所提高。若是,则保留该替换。重复上述过程,直到不再发生变化。 6 V4 u$ `, `+ D4 r& B5 q* t9 s2 |8 E) ?! W0 ^6 ?
常见的k-medoids算法有PAM(Partitioning Around Medoids)算法、CLARA(Clustering LARge Application)算法、CLARANS(Clustering LARge Application based upon Randomized Search)算法。当存在“噪声”和孤立点数据时,k-medoids算法比可k-means更健壮,这是因为中心点不像平均值那么容易被极端数据影响。但是,k-medoids算法的执行代价比k-means高。 * Z# B! q5 k2 h' y+ ^ * }- l* w% U3 A8 W0 \% f. V" V总结:划分方法具有线性复杂度,聚类的效率高的优点。然而,由于它要求输入数字k确定结果簇的个数,并且不适合于发现非凸面形状的簇,或者大小差别很大的簇,所以这些启发式聚类方法对在中小规模的数据库中发现球状簇很适用。为了对大规模的数据集进行聚类,以及处理复杂形状的聚类,基于划分的方法需要进一步的扩展。4 g7 {, q) D' U) S" `% {
7 l( U4 S2 @8 G& q
1.2 层次方法(hierarchical method)- n$ [1 }. |/ m3 |
层次方法对给定数据对象集合进行层次的分解。根据层次的分解如何形成,层次的方法可以分为凝聚的和分裂的[30]。凝聚的方法,也称为自底向上的方法,一开始将每个对象作为单独的一个组,然后相继地合并相近的对象或组,直到所有的组合并为一个(层次的最上层),或者达到一个终止条件。分裂的方法,也称为自顶向下的方法,一开始将所有的对象置于一个簇中,在迭代的每一步中,一个簇被分裂为更小的簇,直到最终每个对象在单独的一个簇中,或者达到一个终止条件。 w" y' N. A; P * @) S2 {/ _# D, U: F3 V1 J主要的凝聚聚类算法有CURE,CHAMELEON,BIRCH,ROCK等。 $ l) ?; Z; |% W( I( ? k( K$ ^$ }5 m, G1 y6 H3 q
1.BIRCH算法) {" i, x! {& l: ~( _
( e% ?4 W) P3 o1 YBIRCH(Balanced Iterative Reducing and Clustering using Hierarchies)算法使用了一种叫做CF-树(聚类特征树,即Clustering Feature Tree)的分层数据结构,来对数据点进行动态、增量式聚类。CF-树是存储了层次聚类过程中的聚类特征信息的一个加权平衡树,树中每个节点代表一个子聚类,并保持有一个聚类特征向量CF。每个聚类特征向量是一个三元组,存储了一个聚类的统计信息。聚类特征向量中包含了一个聚类的三个统计信息:数据点的数目N,这N个数据点的线性和,以及这N个数据点的平方和SS。一个聚类特征树是用于存储聚类特征CF的平衡树,它有两个参数:每个节点的最大子节点数和每个子聚类的最大直径。当新数据插入时,就动态地构建该树。与空间索引相似,它也用于把新数据加入到正确的聚类当中。& S) F" A* V$ H
( H. r. Q; @; e) M1 V
BIRCH算法的主要目标是使I/0时间尽可能小,原因在于大型数据集通常不能完全装入内存中。BIRCH算法通过把聚类分为两个阶段来达到此目的。首先通过构建CF-树对原数据集进行预聚类,然后在前面预聚类的基础上进行聚类。+ u. l: W& I( P- F
; V1 L% y* B1 z4 ^% b总结:层次的方法的缺陷在于,一旦一个步骤(合并或分裂)完成,它就不能被撤消,该技术的一个主要问题是它不能更正错误的决定。有两种方法可以改进层次聚类的结果:(a)在每层划分中,仔细分析对象间的“联接”,例如CURE中的做法。(b)综合层次凝聚和迭代的重定位方法。首先用自底向上的层次算法,然后用迭代的重定位来改进结果。 " T* ], x+ p6 h- O/ b5 U v9 {# [* P- X0 d6 i* }# A6 x
1.3 基于密度的方法(density-based method)3 O3 Q, S; }' L, a1 O4 m
绝大多数划分方法基于对象之间的距离进行聚类,这样的方法只能发现球状的簇,而在发现任意形状的簇上遇到了困难。随之提出了基于密度的另一类聚类方法,其主要思想是:只要邻近区域的密度(对象或数据点的数目)超过某个阈值,就继续聚类。也就是说,对给定类中的每个数据点,在一个给定范围的区域中必须至少包含某个数目的点。这样的方法可以用来过滤“噪声”孤立点数据,发现任意形状的簇。常见的基于密度的聚类算法有DBSCAN,OPTICS,DENCLUE等。 5 r6 ], B4 e2 X , Y6 U3 L) A: H- Z; e! Q1. DBSCAN算法9 Q( {7 \0 M) y) U
8 N- C7 x) L6 tDBSCAN(Density-Based Spatial Clustering of Application with Noise)是一个基于高密度连接区域的密度聚类方法。DBSCAN通过检查数据库中每个点的ε-邻域来寻找聚类。如果一个点p的ε-邻域包含多于MinPts个点,则创建一个以p作为核心对象的新簇。然后,DBSCAN反复地寻找从这些核心对象直接密度可达的对象,这个过程可能涉及一些密度可达簇的合并。当没有新的点可以被添加到任何簇时,该过程结束。 \) v, l2 D0 l/ K
. c0 T# B. e7 g e+ K( t
2. OPTICS算法5 L. u9 y: Q% X' V _
8 Y' @9 N$ |+ Y/ h8 }; c1 x9 G4 |5 d
OPTICS(Ordering Points To Identify the Clustering Structure)通过对象排序识别聚类结构。OPTICS没有显式地产生一个数据集合簇,它为自动和交互的聚类分析计算一个簇次序(cluster ordering)。这个次序代表了数据的基于密度的聚类结构。它包含的信息,等同于从一个宽广的参数设置范围所获得的基于密度的聚类。也就是说,对于一个恒定的参数MinPts值,可以同时处理一组距离参数值。) ?1 I9 ^ ^$ e' i
1 e4 ]0 G6 T I! Y1 L8 vOPTICS在选择参数方面具有比DBSCAN较高的灵活性,在采用空间索引时,复杂度为O(nlogn),和DBSCAN时间复杂度相同。但是,它需要额外的空间存储每个对象的核心距离和一个适当的可达距离。 7 S' ~- b4 v* }* a2 X - W4 m+ ~- u0 f4 b) L3. DENCLUE算法 - Q3 J" x& E) E; j8 E0 F: {8 D+ R' t. H1 K1 t8 A1 t4 r, h; S5 |
DENCLUE(DENsity based CLUstEring)是一个基于一组密度分布函数的聚类算法。它是对k-means聚类算法的一个推广:k-means算法得到的是对数据集的一个局部最优划分,而DENCLUE得到的是全局最优划分。 & g( o' E8 E" D: G! U; ` k# F- Y% b; y* Q* u7 g* o" f
DENCLUE算法有一个坚实的数学基础,概括了其他的聚类方法,包括基于划分的、层次的、及基于位置的方法;同时,对于有大量“噪声”的数据集合,它有良好的聚类特征;对于高维数据集合的任意形状的聚类,它给出了一个基于树的存储结构来管理这些单元,因此比一些有影响的算法(如DBSCAN)速度要快。但是,这个方法要求对密度参数σ和噪声阈值ξ进行仔细的选择,如果选择不当则可能显著地影响聚类结果的质量。# O R. L0 ~3 U+ l
5 \% e% p1 k4 A/ i8 d* l) t1.4 基于网格的方法(grid-based method) ! j, j( L. S) W2 U7 C \基于网格的方法把对象空间量化为有限数目的单元,形成了一个网格结构。所有的聚类操作都在这个网格结构(即量化的空间)上进行。基于网格的聚类算法主要有STING, WaveCluster, CLIQUE等。' H* Y8 W# ?% P8 ~! w
: w+ ^$ X( ]; [, w1.STING算法 & Y) u( N& H6 }# B 3 L2 P. W5 g3 K+ B [STING(Statistical Information Grid-based method)是一种基于网格的多分辨率聚类技术,它将空间区域划分为矩形单元。针对不同级别的分辨率,通常存在多个级别的矩形单元,这些单元形成了一个层次结构:高层的每个单元被划分为多个低一层的单元。关于每个网格单元属性的统计信息(例如平均值、最大值和最小值)被预先计算和存储。这些统计信息用于回答查询。: l3 M5 p" i' I. `# x