层次聚类(Hierarchical Clustering)——BIRCH算法详解及举例

1 BIRCH概述

BIRCH(Balanced Iterative Reducing and Clustering Using Hierarchies)的主要动机是两个方面,一是处理大数据集,二是对异常值的鲁棒性。该算法中引入两个概念:聚类特征(Clustering Feature,CF)和聚类特征树(CF-tree),通过这两个概念对簇进行概括,利用各个簇之间的距离,采用层次方法的平衡迭代对数据集进行规约和聚类。

2 聚类特征(CF)

CF是BIRCH增量聚类算法的核心,使用CF概括描述各簇的信息,设某簇中有N个D维数据点 { x → n } ( n = 1 , 2 , . . . , N ) \{\overrightarrow x_n\}(n=1,2,...,N) {x n}(n=1,2,...,N),则该簇的聚类特征定义为三元组:
C F = ( N , L S , S S ) CF=(N,LS,SS) CF=(N,LS,SS)
其中N是簇中点的数目,矢量LS是个各点的线性求和即 ∑ n = 1 N x → n = ( ∑ n = 1 N x n 1 , ∑ n = 1 N x n 2 , . . . , ∑ n = 1 N x n D ) \sum_{n=1}^N\overrightarrow x_n=(\sum_{n=1}^Nx_{n1},\sum_{n=1}^Nx_{n2},...,\sum_{n=1}^Nx_{nD}) n=1Nx n=(n=1Nxn1,n=1Nxn2,...,n=1NxnD)
标量SS是各数据点的平方和即 ∑ n = 1 N x → n 2 = ∑ n = 1 N x → n T x → n = ∑ n = 1 N ∑ i = 1 D x n i 2 \sum_{n=1}^N\overrightarrow x_n^2=\sum_{n=1}^N\overrightarrow x_n^T\overrightarrow x_n=\sum_{n=1}^N\sum_{i=1}^D x_{ni}^2 n=1Nx n2=n=1Nx nTx n=n=1Ni=1Dxni2

举个例子
假设簇一有三个数据点(2, 5)、(3, 2)和(4, 3),根据定义,簇一的聚类特征是
C F 1 = ( 3 , ( 2 + 3 + 4 , 5 + 2 + 3 ) , ( 2 2 + 5 2 ) + ( 3 2 + 2 2 ) + ( 4 2 + 3 2 ) ) = ( 3 , ( 9 , 10 ) , 67 ) CF1=(3, (2+3+4,5+2+3), (2^2+5^2)+(3^2+2^2)+(4^2+3^2)) =(3, (9,10),67) CF1=(3,(2+3+45+2+3),(22+52)+(32+22)+(42+32))=(3,(910)67)

CF具有可加性:CF1=(n1,LS1,SS1),CF2=(n2,LS2,SS2),则CF1+CF2=(n1+n2, LS1+LS2, SS1+SS2)表示将两个不相交的簇合并成一个大簇的聚类特征。

举个例子
设簇C2的CF2=(3,(35,36),857),那么,由簇C1和簇C2合并而来的簇C3的聚类特征CF3计算如下:
CF3=(3+3, (9+35, 10+36), (67+857))=(6, (44, 46), 924)

聚类特征本质上是给定簇的统计汇总,可以有效地对数据进行压缩,而且基于聚类特征可以很容易地推导出簇的许多统计量和距离度量。
假设给定簇中有N个D维数据点,可用以下公式定义簇的质心 X 0 X_0 X0,半径R和直径D
簇质心: x → 0 = ∑ i = 1 N X → i N = L S N \overrightarrow x_0=\frac{\sum_{i=1}^N\overrightarrow X_i}{N}=\frac{LS}{N} x 0=Ni=1NX i=NLS
簇半径: R = ∑ i = 1 N ( X → i − X → 0 ) 2 N = N S S − L S 2 N 2 R=\sqrt{\frac{\sum_{i=1}^N(\overrightarrow X_i-\overrightarrow X_0)^2}{N}}=\sqrt{\frac{NSS-LS^2}{N^2}} R=Ni=1N(X iX 0)2 =N2NSSLS2
簇直径: D = ∑ i = 1 N ∑ j = 1 N ( X → i − X → j ) 2 N ( N − 1 ) = 2 N S S − 2 L S 2 N ( N − 1 ) D=\sqrt{\frac{\sum_{i=1}^N\sum_{j=1}^N(\overrightarrow X_i-\overrightarrow X_j)^2}{N(N-1)}}=\sqrt{\frac{2NSS-2LS^2}{N(N-1)}} D=N(N1)i=1Nj=1N(X iX j)2 =N(N1)2NSS2LS2
其中R是成员对象到质心的平均距离,D是簇中两两数据点的平均距离,这两个统计量都反映了簇内紧实度
不同簇间的距离度量通常用曼哈顿距离,公式如下:
D 0 = ∑ i = 1 N 1 ∑ j = N 1 + 1 N 1 + N 2 ( X → i − X → j ) 2 N 1 N 2 = S S 1 N 1 + S S 2 N 2 − 2 L S 1 L S 2 N 1 N 2 D_0=\sqrt{\frac{\sum_{i=1}^{N_1}\sum_{j=N_1+1}^{N_1+N_2}(\overrightarrow X_i-\overrightarrow X_j)^2}{N_1N_2}}=\sqrt{\frac{SS_1}{N_1}+\frac{SS_2}{N_2}-\frac{2LS_1LS_2}{N_1N_2}} D0=N1N2i=1N1j=N1+1N1+N2(X iX j)2 =N1SS1+N2SS2N1N22LS1LS2

3 聚类特征树(CF-tree)

CF树存储了层次聚类的簇的特征,有三个参数:枝平衡因子 β \beta β、叶平衡因子 λ \lambda λ和空间阈值 τ \tau τ。CF树由根节点枝节点叶节点构成,非叶节点中包含不多于 β \beta β个形如 [ C F i , c h i l d i ] [CF_i,child_i] [CFi,childi]的条目(entry)。其中 C F i CF_i CFi表示该节点上子簇的聚类特征信息,指针 c h i l d i child_i childi指向该节点的子节点。叶节点中包含不多于 λ \lambda λ个形如 [ C F i ] [CF_i] [CFi]的条目,此外每个叶节点中都包含指针prev指向前一个叶节点和指针next指向后一个叶节点。空间阈值 τ \tau τ用于限制叶节点的子簇的大小,即所有叶节点的各条目对应子簇的直径D(或半径R)不得大于 τ \tau τ,行如下图
在这里插入图片描述

枝平衡因子β,表示枝节点最大的孩子数,所有内部节点的分支不得多于 β 个,
叶平衡因子λ,表示叶子节点允许包含的最大CF数;
空间阈值 τ,表示 叶节点每个CF的最大样本半径或直径,所有类簇的半径不得大于 τ

例:β=2,λ=3
在这里插入图片描述
在这里插入图片描述
各节点及其元项代表的簇间的关系如左图所示,需要说明的是,CF树上不保存任何数据点,仅有树的结构信息以及相关的聚类特征信息,因此CF树可以达到压缩数据的效果。

4 聚类特征树的生成

最开始的 CF 树 是空的,没有任何样本,我们一边添加数据,一边进行学习。

首先,读入第一条数据 A,构造一个叶子节点和一个子簇。
在这里插入图片描述
当引入第二个样本B时,需要判断,样本A和样本B是否在半径为 τ 的超球体范围内?

如果在,也就是说他们属于同一个CF,根据 CF 可加性,更新CF
在这里插入图片描述
如果不在,我们需要一个新的CF三元组,来容纳这个新的值
在这里插入图片描述
假设我们设置枝平衡因子β=2,即内部节点的分支不得多于2个。

这时候来了一个点C,离CF3最近,但不属于A,B两个超球体范围内,本应该将它单独设一个分支,但是CF1的分枝数已经达到最大值,此时,我们只能选择继续向下分裂
在这里插入图片描述

5 总结

形象得理解了 CF 树建立的过程,我们尝试总结一下步骤:

1、初始化枝平衡因子β,叶平衡因子λ和空间阈值τ;

2、在数据库中逐个选取数据点,将数据点插入到CF树上:

(i) 从根节点开始,自上而下选择最近的孩子节点

(ii) 到达叶子节点后,

在这里插入图片描述
3、更新每个非叶节点的CF信息,如果分裂节点,在父节点中插入新的元组,检查分裂,直到根节点
在这里插入图片描述
了解了CF树构建的过程,我们自然就可以理解为什么Birch算法适合于处理大数据。

(1)CF 结构概括了簇的基本信息,并且是高度压缩的,它存储了小于实际数据点的聚类信息。每个新添加的数据其作为个体消失了,将信息融入的集合簇中
(2)增量式的学习方法,不用一次将数据全部加载到内存,可以一边添加数据一边进行学习

参考文献1
参考文献2

  • 9
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
BIRCH层次聚类算法是一种适用于大规模数据集的聚类算法,相对于K-means和DBSCAN,BIRCH的应用并不广泛,但它具有一些独特的优势。BIRCH算法适用于数据量大且类别数目较多的情况,其运行速度很快,只需对数据集进行单遍扫描就能进行聚类,这是在数据量庞大的情况下的一个重要优势。 BIRCH算法的设计考虑了在大规模数据集上聚类的精确性和最小化I/O代价之间的平衡。它能够识别数据集中数据分布的不均衡性,将稠密区域中的数据聚类,将稀疏区域中的数据视为异常点并移除。此外,BIRCH是一种增量聚类方法,每个数据点的聚类决策都基于已处理的数据点,而不是全局数据点。 BIRCH算法的核心是生成CF Tree,其中步骤1是关键,其他步骤是为优化聚类结果而进行的。与K-Means和Mini Batch K-Means不同,BIRCH算法可以不需要输入类别数目K值,而是根据CF元组的组数确定最终的聚类数目K。如果输入了K值,那么CF元组将按照距离大小进行合并。 此外,BIRCH算法还提供了一些重要概念和方法。n_clusters参数可以控制输出的聚类结果的粒度,如果取None,则输出CF Tree的最细粒度聚类结果;如果是整数值,则通过AgglomerativeClustering按照簇之间距离最近的原则合并最近的簇,直到达到指定的簇数。BIRCH还提供了transform方法,用于计算样本点到所有簇中心的距离。 总结来说,BIRCH层次聚类算法是一种适用于大规模数据集的聚类算法,具有快速运行和自适应聚类数目的特点。它通过生成CF Tree并利用其中的信息进行聚类,能够在平衡聚类精确性和效率的同时处理大规模数据集。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老实人小李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值