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 级数值聚类的首选"预处理压缩机"。

相关推荐
大山同学3 小时前
图片补全-Context Encoder
人工智能·机器学习·计算机视觉
薛定谔的猫19824 小时前
十七、用 GPT2 中文对联模型实现经典上联自动对下联:
人工智能·深度学习·gpt2·大模型 训练 调优
陈天伟教授5 小时前
人工智能应用-机器听觉:15. 声纹识别的应用
人工智能·神经网络·机器学习·语音识别
板面华仔5 小时前
机器学习入门(三)——决策树(Decision Tree)
人工智能·决策树·机器学习
源于花海6 小时前
迁移学习的前沿知识(AI与人类经验结合、传递式、终身、在线、强化、可解释性等)
人工智能·机器学习·迁移学习·迁移学习前沿
机 _ 长6 小时前
YOLO26 改进 | 基于特征蒸馏 | 知识蒸馏 (Response & Feature-based Distillation)
python·深度学习·机器学习
龙山云仓6 小时前
No140:AI世间故事-对话康德——先验哲学与AI理性:范畴、道德律与自主性
大数据·人工智能·深度学习·机器学习·全文检索·lucene
jay神8 小时前
基于YOLOv8的木材表面缺陷检测系统
人工智能·深度学习·yolo·计算机视觉·毕业设计
songyuc8 小时前
【Llava】load_pretrained_model() 说明
人工智能·深度学习