. m& H# L* i0 X STING是一种基于网格的多分辨率的聚类技术,它将输入对象的空间区域划分成矩形单元,空间可以用分层和递归方法进行划分。这种多层矩形单元对应不同的分辨率,并且形成了一个层次结构:每个高层单元被划分成低一层的单元。关于每个网格单元的属性的统计信息(如均值,最大值和最小值)被作为统计参数预先计算和存储。对于查询处理和其他数据分析任务,这些统计参数是有效的。; W0 A$ B) b w
8 P5 `* R$ ]# g+ L. Y7 ? STING算法:! |* u0 G, w7 V4 c( W0 d' |# u
7 o% [2 m# i6 P4 E j
(1) 针对不同的分辨率,通常有多个级别的矩形单元。. G. L* E6 \4 W+ \9 P% I
+ T8 E$ b! D& }) ~ h9 V# C
(2) 这些单元形成了一个层次结构,高层的每个单元被划分成多个底一层的单元。 & [- s( {! `, y4 l) G& a' ^6 e4 [1 a4 C h
(3) 关于每个网格单元属性的统计信息(例如平均值,max,min)被预先计算和存储,这些统计信息用于回答查询。(统计信息是进行查询使用的)2 d) l+ j- {" r" ~' `, T- u
5 V1 U$ F$ y( Z' T. I2 U 网格中常用的参数: $ ^/ u( M v- t3 G$ @2 d# l, a4 l) ]- u; P3 p, A0 ?0 F; U
(1) count 网格中对象数目) B! Z! {3 w% b0 B" }- {' C7 n# N
! u: u( Y. j, e4 {. {8 ?
(2) mean网格中所有值的平均值0 A6 k# B0 w6 o1 m
- U0 z) j) Q2 r u9 m/ q# J9 k
(3) stdev网格中属性值的标准偏差 h5 i" t j5 I* \1 c8 ^* [' g6 ^) \* [0 w
(4) min 网格中属性值的最小值 ; J! l; L5 @$ c* e# q4 J% J0 N( C6 E( @! O1 e; g
(5) max 网格中属性值的最大值9 Y& R3 f" j8 S! |& D5 [4 W
4 g7 R! x0 q6 Z1 H! F$ F9 m# q' S1 \
(6) distribution 网格中属性值符合的分布类型。如正态分布,均匀分布3 Q) H7 V+ t- i# P+ i$ h+ R
4 K, R6 ~! t0 ~ STING聚类的层次结构: 6 c* l0 o5 o$ x1 b1 R, d1 l! T. u. b" T
通过上面两幅图,我们可以清晰的理解,STING的层次结构,上一层与下一层的关系。3 J5 D. F2 `$ X
- S: A- d# z* a) H ]1 `
注意:当数据加载到数据库时。最底层的单元参数直接由数据计算,若分布类型知道,可以用户直接指定。而较高层的单元的分布类型可以基于它对应的低层单元多数的分布类型,用一个阈值过滤过程的合取来计算,若底层分布类型彼此不同,那么高层分布类型为none , h9 s& l J( _4 [ + @. s2 H" ?7 K/ w S STING查询算法步骤:2 p* X# o- r; m. h" W) @* R# M2 s
, x) j; }; y2 A5 Q" r
(1) 从一个层次开始 & W4 X8 M- b6 a( w2 T5 [- q3 T- W; K8 n7 F9 a: R+ Z: E, u
(2) 对于这一个层次的每个单元格,我们计算查询相关的属性值。& i9 y# h K$ F* l( ^5 X( }9 ]
. G! N, b5 `; W0 b
(3) 从计算的属性值以及约束条件下,我们将每一个单元格标记成相关或者不想关。(不相关的单元格不再考虑,下一个较低层的处理就只检查剩余的相关单元) # i) e; h6 Y. W5 J) W: J ' Z! P* J9 v M1 L" r6 ^3 c (4) 如果这一层是底层,那么转(6),否则转(5) 1 x/ u( x/ ^! {' V2 H' U 1 d( d; z. ]: _' b! ]2 E) M! { (5) 我们由层次结构转到下一层,依照步骤2进行 3 ^" ?3 u4 _8 ^! J4 f7 q 8 z( a/ Y+ k2 Y) u6 h (6) 查询结果得到满足,转到步骤8,否则(7)' S- ]' x+ Z8 x9 k7 C
6 @, b3 t' s( w, r P" p: Q (7) 恢复数据到相关的单元格进一步处理以得到满意的结果,转到步骤(8) $ D9 R6 Q7 s {) e8 d ) R( ~! T# k b7 _" O1 [+ D (8) 停止 % p2 J1 n0 F% G/ {1 B( o0 G3 p. s- I" c( h$ L/ I$ w) o$ o: V
到这儿,STING算法应该基本就差不多了,其核心思想就是:根据属性的相关统计信息进行划分网格,而且网格是分层次的,下一层是上一层的继续划分。在一个网格内的数据点即为一个簇。( D9 K5 U9 O* B; k+ n
+ z$ w1 A) z z9 w! s0 Q( ?2 y
同时,STING聚类算法有一个性质:如果粒度趋向于0(即朝向非常底层的数据),则聚类结果趋向于DBSCAN聚类结果。即使用计数count和大小信息,使用STING可以近似的识别稠密的簇。 . P' q% o1 G8 R/ D5 |) q# d# W ; p3 m) A/ L) T# D STING算法的优点:/ A i5 c% K! ?8 L+ {
6 F. w7 f& _' R4 O7 \/ m9 a
(1) 基于网格的计算是独立于查询的,因为存储在每个单元的统计信息提供了单元中数据汇总信息,不依赖于查询。 : r: d- [6 @+ W, I) m# q# L$ S . P% `6 x3 ^ ^" F9 C& Y, |3 n' \ (2) 网格结构有利于增量更新和并行处理。0 _1 F0 ?+ t) \6 y, j- ^ _
) M a- p. @, `, C/ G
(3) 效率高。STING扫描数据库一次开计算单元的统计信息,因此产生聚类的时间复杂度为O(n),在层次结构建立之后,查询处理时间为)O(g),其中g为最底层网格单元的数目,通常远远小于n。, f8 N5 {- r7 w& }* @% H. N
" H1 g. P# C# O5 U5 b/ }/ e) j 缺点:9 c' L5 Z* K: n/ o, z4 {: L
# \ `" y( n4 L3 b3 f& T
(1) 由于STING采用了一种多分辨率的方法来进行聚类分析,因此STING的聚类质量取决于网格结构的最底层的粒度。如果最底层的粒度很细,则处理的代价会显著增加。然而如果粒度太粗,聚类质量难以得到保证。' r3 w, V! E" I' P
z$ H* I' ^6 i- d( ~ y
(2) STING在构建一个父亲单元时没有考虑到子女单元和其他相邻单元之间的联系。所有的簇边界不是水平的,就是竖直的,没有斜的分界线。降低了聚类质量。" J) d; Z! H7 z& l# g