Birch聚类算法

Birch(Balanced Iterative Reducing and Clustering using Hierarchies)是一种专为大规模数值数据设计的增量式、多阶段聚类算法。它由 Zhang & Ramakrishnan 于 1996 年在 SIGMOD 提出,目标是在一次数据扫描内、有限内存下,快速生成一棵内存驻留的层次摘要树(CF-Tree),再基于该摘要执行最终聚类。核心思想:"先压缩,再聚类"。


一、核心概念:CF & CF-Tree

  1. Clustering Feature(CF)

    三元组:CF = (N, LS, SS)

    • N:簇中样本数
    • LS:N 个样本的线性和(向量)
    • SS:N 个样本的平方和(向量)

    性质:CF 满足可加性------两簇合并只需对应分量相加,无需扫描原始数据。

    由 CF 可即时计算簇的质心、半径、直径、方差等所有常用指标。

  2. 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 等)得到最终簇标签。

由于虚拟样本量 ≪ 原始数据,这一步可在内存中快速完成。


三、超参数与调优

  1. T(阈值)
    • 决定叶节点 CF 的最大半径;T 越小 → 簇越细 → 树越大。
    • 可先用"数据采样 + 二分搜索"自动估计一个合理初始 T。
  2. B(分枝因子)、L(叶因子)
    • 控制节点容量,默认 B=50, L=100 即可。
  3. 内存页大小 / 最大内存
    • 当内存不足时,BIRCH 会自动提升 T 并合并叶节点,保证在线运行。
  4. n_clusters
    • 阶段 3 若用 K-means,需要指定 K;若用层次,可用"直径-剪枝"或 Silhouette 自动选择。

四、复杂度与性能

  • 时间:O(N · logₘ§),其中 P 为树节点数,m 为分支因子;单遍扫描。
  • 空间:O(P · (d + 12)),d 为维度,与 N 无关;内存恒定。
  • 插入一条样本仅需微秒级,可处理千万级流式数据。

五、优点 vs 缺点

优点

  1. 增量式,单遍扫描,内存恒定,适合流式/磁盘驻留大数据。
  2. 摘要结构(CF)支持任意聚合、合并、拆分,天然适合动态维护。
  3. 发现球形或凸形簇效果好,对噪点有局部过滤能力(孤立点自成 CF)。
  4. 与后续算法解耦:CF-Tree 可作为通用数据摘要,供 K-means、DBSCAN、层次聚类等二次使用。

缺点

  1. 对非球形、密度差异大的数据不如 DBSCAN。
  2. 依赖欧氏距离与球形半径假设,对高维稀疏数据效果下降。
  3. 参数 T 需微调,过小 → 树爆炸,过大 → 簇过粗。
  4. 只能处理数值型特征;类别变量需先数值化。

六、使用场景

  • 金融实时行情:秒级插入千万条 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 级数值聚类的首选"预处理压缩机"。

相关推荐
2301_800256113 小时前
B+树:数据库的基石 R树:空间数据的索引专家 四叉树:空间划分的网格大师
数据结构·数据库·b树·机器学习·postgresql·r-tree
Clarence Liu4 小时前
机器学习(5) 梯度下降
人工智能·机器学习
子午4 小时前
【2026原创】动物识别系统~Python+深度学习+人工智能+模型训练+图像识别
人工智能·python·深度学习
victory04314 小时前
大模型学习阶段总结和下一阶段展望
深度学习·学习·大模型
摘星观月4 小时前
【三维重建2】TCPFormer以及NeRF相关SOTA方法
人工智能·深度学习
shangjian0074 小时前
AI大模型-机器学习-分类
人工智能·机器学习·分类
人工小情绪4 小时前
深度学习模型部署
人工智能·深度学习
AI科技星4 小时前
光速飞行器动力学方程的第一性原理推导、验证与范式革命
数据结构·人工智能·线性代数·算法·机器学习·概率论
cyyt5 小时前
深度学习周报(1.05~1.11)
人工智能·深度学习