Birch(Balanced Iterative Reducing and Clustering using Hierarchies)是一种专为大规模数值数据设计的增量式、多阶段聚类算法。它由 Zhang & Ramakrishnan 于 1996 年在 SIGMOD 提出,目标是在一次数据扫描内、有限内存下,快速生成一棵内存驻留的层次摘要树(CF-Tree),再基于该摘要执行最终聚类。核心思想:"先压缩,再聚类"。
一、核心概念:CF & CF-Tree
-
Clustering Feature(CF)
三元组:CF = (N, LS, SS)
- N:簇中样本数
- LS:N 个样本的线性和(向量)
- SS:N 个样本的平方和(向量)
性质:CF 满足可加性------两簇合并只需对应分量相加,无需扫描原始数据。
由 CF 可即时计算簇的质心、半径、直径、方差等所有常用指标。
-
CF-Tree
- 高度平衡的多叉树,节点大小由内存页(或参数 B、L)限制。
- 每个内部节点最多 B 个条目,每个叶节点最多 L 个条目;每条目就是一个 CF。
- 叶节点间通过双向链表串联,方便后续扫描。
- 插入新样本时,沿树选择最近子簇(通常用 D0 距离 = 质心欧氏距离),若插入后叶 CF 的半径 ≤ T(阈值 T 由用户给定或动态调整),则直接吸收;否则分裂叶节点并向上递归分裂。
- 整个过程仅一次数据扫描,内存占用只与 CF-Tree 节点数成正比,与原始样本数无关。
二、算法流程(两阶段 / 三阶段可选)
阶段 1:增量构建 CF-Tree(摘要)
扫描数据 → 逐点插入 → 按需分裂 → 得到一棵"紧凑"但可能过小的 CF-Tree。
阶段 2(可选):再平衡 / 压缩
若内存允许,可继续用全局聚类(如 AGNES)对叶节点 CF 再合并,降低 T 得到更精细摘要。
阶段 3:全局聚类
将叶节点 CF 作为"虚拟样本",运行任意传统算法(K-means、BIRCH 自身层次、DBSCAN 等)得到最终簇标签。
由于虚拟样本量 ≪ 原始数据,这一步可在内存中快速完成。
三、超参数与调优
- T(阈值)
- 决定叶节点 CF 的最大半径;T 越小 → 簇越细 → 树越大。
- 可先用"数据采样 + 二分搜索"自动估计一个合理初始 T。
- B(分枝因子)、L(叶因子)
- 控制节点容量,默认 B=50, L=100 即可。
- 内存页大小 / 最大内存
- 当内存不足时,BIRCH 会自动提升 T 并合并叶节点,保证在线运行。
- n_clusters
- 阶段 3 若用 K-means,需要指定 K;若用层次,可用"直径-剪枝"或 Silhouette 自动选择。
四、复杂度与性能
- 时间:O(N · logₘ§),其中 P 为树节点数,m 为分支因子;单遍扫描。
- 空间:O(P · (d + 12)),d 为维度,与 N 无关;内存恒定。
- 插入一条样本仅需微秒级,可处理千万级流式数据。
五、优点 vs 缺点
优点
- 增量式,单遍扫描,内存恒定,适合流式/磁盘驻留大数据。
- 摘要结构(CF)支持任意聚合、合并、拆分,天然适合动态维护。
- 发现球形或凸形簇效果好,对噪点有局部过滤能力(孤立点自成 CF)。
- 与后续算法解耦:CF-Tree 可作为通用数据摘要,供 K-means、DBSCAN、层次聚类等二次使用。
缺点
- 对非球形、密度差异大的数据不如 DBSCAN。
- 依赖欧氏距离与球形半径假设,对高维稀疏数据效果下降。
- 参数 T 需微调,过小 → 树爆炸,过大 → 簇过粗。
- 只能处理数值型特征;类别变量需先数值化。
六、使用场景
- 金融实时行情:秒级插入千万条 tick 数据,在线维护客户行为簇。
- 传感器网络:边缘设备内存受限,持续汇总传感数据。
- 电信话单、互联网日志:一次性扫描磁盘文件,生成用户分群摘要。
- 预聚类:先用 BIRCH 把 1 亿条样本压成 1 万个 CF,再跑 K-means,总耗时从"天"变"分钟"。
七、Python 快速体验
python
from sklearn.cluster import Birch
import numpy as np
X = np.random.randn(100000, 10) # 10 维百万样本
brch = Birch(threshold=0.5, branching_factor=50, n_clusters=100)
brch.fit(X) # 单遍扫描
labels = brch.labels_ # 最终簇标签
cf_list = brch.subcluster_centers_ # 所有叶 CF 质心
一句话总结
BIRCH 用"CF 三元组"把海量数据压成一棵内存树,再对摘要聚类,兼顾速度、内存、增量三大优势,是工业界处理TB 级数值聚类的首选"预处理压缩机"。