BIRCH算法
——使用聚类特征树的多阶段聚类
上篇文章介绍了层次聚类的提出、分类和相关概念,以及给出了对于传统的纯粹的层次聚类的缺陷的解析:
https://blog.csdn.net/qiu1440528444/article/details/80707845
本章主要介绍进行优化后的层次聚类的算法之一:BIRCH算法。
BIRCH算法是通过集成层次聚类和其他聚类算法来对大量数值数据进行聚类,其中层次聚类用于初始的微聚类阶段,而其他方法如迭代划分(在最后的宏聚类阶段)。
如此,克服了凝聚聚类方法所面临的两个困难;
- 可伸缩性;
- 不能撤销前一步所做的工作;
适用:BIRCH算法比较适合于数据量大,类别数K较多的情况,运行速度快,只需要单遍扫描数据集就能进行聚类。
那么,如何单遍扫描数据集就能完成聚类呢???
- BIRCH算法利用一个树结构来快速聚类,称为聚类特征树,CF Tree
- 树的每一个节点是由若干个聚类特征CF组成,每个节点(包含叶子节点)都有若干个CF。
- 内部节点的CF有指向孩纸节点的指针。
- 所有叶子节点用一个双向链表链接起来。
具体的来说: BIRCH使用聚类特征(CF)来概括一个簇,使用聚类特征树(CF树)来表示聚类的层次结构。这些结构帮助聚类方法在大型数据库中取得好的速度和伸缩性,还使得BIRCH方法对新对象增量和动态聚类也非常有效。
考虑一个n个d维的数据对象或点的簇。簇的聚类特征CF是一个3维向量,汇总了对象簇的信息,定义如下:
其中,n是簇中点的数目,LS是n个点的线性和(即 ),
SS是数据点的平方和(即)。
聚类特征本质上是给定簇的统计汇总:从统计学的观点来看,它是簇的零阶矩、一阶矩和二阶矩。
使用聚类特征,我们可以很容易地推导出簇的许多有用的统计量。
例如,簇的形心x0,半径R和直径D分别是:
其中R是成员对象到形心的平均距离,D是簇中逐对对象的平均距离。R和D都反映了形心周围簇的紧凑程度。
- BIRCH试图利用可用的资源生成最好的簇。给定有限的主存,一个重要的考虑是最小化I/O所需时间。BIRCH采用了一种多阶段聚类技术:数据集的单遍扫描产生一个基本的好聚类,一或多遍的额外扫描可以用来进一步(优化)改进聚类质量。它主要包括两个阶段:
阶段一:BIRCH扫描数据库,建立一棵存放于内存的初始CF树,它可以看作数据的多层压缩,试图保留数据的内在的聚类结构。
阶段二:BIRCH采用某个(选定的)聚类算法对CF树的叶节点进行聚类,把稀疏的簇当作离群点删除,而把稠密的簇合并为更大的簇。 - 在阶段一中,随着对象被插入,CF树被动态地构造。这样,该方法支持增量聚类。
- 一个对象被插入到最近的叶条目(子簇)。如果在插入后,存储在叶节点中的子簇的直径大于阈值,则该叶节点和可能的其他节点被分裂。新对象插入后,关于该对象的信息向树根节点传递。
- 通过修改阈值,CF树的大小可以改变。如果存储CF树需要的内存大于主存的大小,可以定义较大的阈值,并重建CF树。
- 在 CF 树重建过程中,通过利用老树的叶节点来重新构建一棵新树,因而树的重建过程不需要访问所有点,即构建CF 树只需访问数据一次就行。
- 可以在阶段二使用任意聚类算法,例如典型的划分方法。
完整的CF树如下图所示:
对于CF树有3个重要参数:
- 第一个参数是每个内部节点的最大CF数B;
- 第二个参数是每个叶子节点的最大CF数L;
- 第三个参数是针对叶子节点中某个CF中的样本点来说的,它是叶节点每个CF的最大样本半径阈值T;就是说,在这个CF中的所有样本点一定要在半径小于T的一个超球体内。对于上图中的CF Tree,限定了B=7, L=5, 也就是说内部节点最多有7个CF,而叶子节点最多有5个CF。
CF树的具体生成过程参考文献:
总结CF树的建立:
- 初始化枝平衡因子B,叶平衡因子L,空间阀值T;
- 在数据库中逐个选取数据点Xi,并插入CF树中;
*从根节点开始向下寻找和新样本点距离最近的叶子节点以及叶子节点里最近的CF节点;