BIRCH算法:该算法于1996年提出,尤其适用于大型数据库。它会增量地对输入数据进行聚类,有时甚至只需对所有数据扫描一遍就可以产生结果,当然额外的扫描肯定可以提升聚类效果,而且还可以有效处理噪声。BIRCH算法需要引入以下两个概念
聚类特征数类似于平衡B+树,CF树的每个结点是由若干聚类特征CF组成的
聚类特征CF:一个聚类特征由一个三元组表示,它给出了一个簇的汇总描述。在大小为 N N N的 d d d维数据集 { x 1 , x 2 , . . . , x N } \{x_{1},x_{2},...,x_{N}\} {x1,x2,...,xN}上,定义聚类特征如下
C F = ( N , L S ⃗ , S S ) CF=(N,\vec{LS},SS) CF=(N,LS,SS)
聚类特征是可以求和的
如下图,有5个样本形成的一个簇,分别是 ( 3 , 4 ) , ( 2 , 6 ) , ( 4 , 5 ) , ( 4 , 7 ) , ( 3 , 8 ) (3, 4),(2,6),(4,5),(4,7),(3,8) (3,4),(2,6),(4,5),(4,7),(3,8),则有

聚类特征树:一个CF树存储了层次聚类的聚类特征。它存储了层次聚类的聚类特征。下图是一个典型的CF树。CF树中每个非叶结点存储的CF是其孩子结点的CF总和,也即父结点存储的信息是其子结点存储信息的汇总。一个叶子结点至多包含
L
L
L个条目,每个条目是一个聚类特征三元组,每个叶子结点有两个指针,即prev和next,用来把所有的叶子结点连接起来
一个CF树有如下两个参数,当阈值 T T T越大时树就会越小,它们决定了树的大小

如下图,在CF树中,对于父结点的每个CF结点,它的 ( N , L S ⃗ , S S ) (N,\vec{LS},SS) (N,LS,SS)三元组的值等于这个CF结点所指向的所有子结点的三元组之和

聚类特征树的生成规则:CF树是随数据的输入动态增长的,生成CF树的步骤如下
这里再次重申三个参数
开始是,CF树为空,无任何样本,从数据集读入第一个样本点,将其放入一个新的CF三元组 A A A(此时此三元组的 N N N=1),将这个新的CF放入根结点

继续读入第二个样本点,发现此样本点在 A A A的半径 T T T范围内,所以同属于一个CF,因此将此样本点加入 A A A,并更新 A A A的三元组(此时A的三元组中的 N N N=2)

来了第三个样本点,发现此结点未在
A
A
A的半径
T
T
T范围内,所以需要一个新的CF三元组
B
B
B来容纳这个新的值

对于第四个样本点,发现它在 B B B的半径 T T T范围内

在构建CF tree的过程中,除了空间距离,还需要考虑平衡因子B和L。比如对于以下LN1节点而言,如果叶平衡因子L的值大于3,则sc8这个CF就可以作为LN1的一个叶子节点

如果小于3,就需要分裂出一个新的分支,分裂时,从LN1下所有的CF中挑选出距离最小和最大的两个CF,作为的内部节点,图示如下

枝平衡因子B影响内部节点的结构,如果B的值小于3,则要对内部节点进行拆分,分裂的方法是相同的,就是挑选距离最近和最远的两个CF作为新的分支,分裂后的结果如下

