BIRCH 大规模数据聚类算法
BIRCH (Balanced Iterative Reducing and Clustering using Hierarchies) 是一种在特别大规模的数据集上进行分层聚类的非监督的数据挖掘算法。它能增量的,动态的对输入的多维度数据在给定有限的内存和时间条件的情况下进行高质量 的聚类。大多数情况下,BIRCH只需要对数据进行一次遍历。同时,BIRCH被认为是“数据库领域高效控制噪声的第一聚类算法”。
Problem with previous methods
之 前的聚类算法在非常大的数据集上表现的比较低效,并且没有充分考虑数据集太大无法载入内存的情况。从而,为了维持很好的聚类质量同时减少额外的I/O操作 的开销而引进了很多的额外开销。另外,大部分的聚类处理器都会为每一次聚类决策平等的考虑每一个数据点(或者所有的现存聚类),而不是基于数据点之间的距 离而做启发式的权重。
Advantages with BIRCH
局部的,每一次聚类决策 都不需要扫描所有的数据点或者现存的聚类。它认为并不是所有的数据空间都是同样的被占用的,并不是所有的数据点都是平等的重要的。它充分利用可用的内存空 间来获得最可能好的子聚类,同时使得I/O消费最少。它同时是一种增量方法,提前不需要整个数据集。
BIRCH Clustering Algorithm
首先定义以下概念:
聚类特征: 给定在一个聚类中的N个d维的数据点,Xi,这个聚类的CF向量定义为一个三元组:CF=(N,LS,SS).其中LS是线性和,SS是数据点的平方和。
CF 树:一颗CF树是一个高度平衡树,它有两个参数,分支系数B和阈值T。每一个非叶子几点最多包含B哥[CFi,childi]项。其中childi是指向 第i个孩子节点的一个指针,CFi是又这个孩子表示的子聚类。一个叶子节点最多包含L个[CFi]形式的项。它同时有两个指针prev和next.用来把 素有的叶子节点链接成链。树的大小是T的函数,T越大,树就越小。我们要求一个节点能够载入到一个大小为p的页面中。B和L都是由P决定的。所以P可以性 能调整而变化。这是数据库的一种非常简洁的表示,因为在每一个叶子节点中的不是一个数据点而是一个子聚类。
在算法的第一 步,扫描所有的数据,使用给定大小的内存建立初始的内存CF树。在第二步中,它扫描在初始CF树中所有的叶子项来重建一个更小的CF树。同时移除边缘点并 把紧密的子聚类合并成更大的聚类。在第三步中,我们使用一个已经存在的聚类算法对所有的叶子项目、进行聚类。这里对使用CF向量表示的子聚类直接使用一个 聚集的分层聚类算法。它为用户提供了指定想要聚类数目或者直径阈值的便利。在这一步之后,我们获取了一系列的聚类,它们能保留数据的主要分布模式。然而, 可能存在一些微小的局部的不准确,可以在第四步中进行控制。第四步是可选的。在第四步中,我们使用产生的聚类中心作为种子,并把数据点重新分布到离它最近 的种子来获取一系列新的聚类。第四步也为我们提供了一个丢弃边缘点的机会。我们把与离它最近的种子距离太远的点看作边缘点。