news 2026/3/27 6:02:37

机器学习 - BIRCH 聚类

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
机器学习 - BIRCH 聚类

摘要:BIRCH聚类是一种高效处理大规模数据的层次聚类算法。它通过构建CFTree树形结构,使用聚类特征(CF)汇总数据统计信息,实现单次扫描数据即可完成初步聚类。算法核心优势在于内存效率高、计算速度快,适合百万级样本处理。BIRCH包含三个关键步骤:初始化、聚类和优化,通过参数threshold和n_clusters控制聚类粒度。虽然对非球形聚类效果有限,但其出色的可扩展性使其成为大数据场景的理想选择。Python中可通过scikit-learn的Birch类实现,并配合调整兰德指数(ARI)评估聚类效果。

目录

机器学习 - BIRCH 聚类

BIRCH 聚类核心概念

核心思想

关键概念:聚类特征(CF)

CF Tree 结构

BIRCH 聚类的三个主要步骤

BIRCH 聚类的 Python 实现

示例1

示例2

代码解释

BIRCH 聚类的优点

BIRCH 聚类的缺点

适用场景

总结


机器学习 - BIRCH 聚类

BIRCH(平衡迭代规约与聚类层次结构)是一种层次聚类算法,专为高效处理大型数据集而设计。该算法通过递归地将数据划分为子聚类,构建树形的聚类结构,直至满足停止准则。

BIRCH 使用两种主要数据结构来表示聚类:聚类特征(CF)和子聚类特征(SCF)。聚类特征(CF)用于汇总一组数据点的统计特性,而子聚类特征(SCF)用于表示子聚类的结构。

BIRCH 聚类核心概念

BIRCH(Balanced Iterative Reducing and Clustering using Hierarchies)是一种层次聚类算法,专为大规模数据集设计,核心优势是高效、内存友好,能在单次扫描数据时完成初步聚类,适合处理百万级以上的样本。

核心思想

BIRCH 不直接对原始数据聚类,而是先构建一个紧凑的树形结构(CF Tree),将数据压缩成若干个 “聚类特征(CF)” 节点,再对这些节点进行聚类,避免重复处理原始数据,大幅降低计算成本。

关键概念:聚类特征(CF)

每个 CF 节点包含 3 个核心参数,用来描述一个子聚类的统计信息:

  • N:子聚类中的样本数量
  • LS:子聚类中所有样本的线性和(各维度求和)
  • SS:子聚类中所有样本的平方和(各维度平方后求和)

通过这 3 个参数,可快速计算子聚类的中心、半径、距离等,无需存储原始样本。

CF Tree 结构

CF Tree 是一棵平衡树,分为三层:

  1. 叶子节点:包含多个 CF 条目,每个条目对应一个子聚类,且叶子节点间通过双向链表连接;
  2. 非叶子节点:包含指向子节点的指针和对应的 CF 汇总信息;
  3. 根节点:整棵树的顶层节点。

构建树时,每个节点有最大容量限制,超过则分裂,保证树的紧凑性。

BIRCH 聚类的三个主要步骤

  1. 初始化:BIRCH 构建一个空的树形结构,并设置一个节点中可存储的最大聚类特征(CF)数量。
  2. 聚类:BIRCH 逐个读取数据点并将其添加到树形结构中。如果节点中已存在聚类特征(CF),则 BIRCH 会用新数据点更新该聚类特征(CF);如果节点中没有聚类特征(CF),则 BIRCH 为该数据点创建一个新的聚类特征(CF)。之后,BIRCH 会检查节点中的聚类特征(CF)数量是否超过最大阈值,若超过阈值,则通过递归划分节点中的聚类特征(CF)来创建新的子聚类。
  3. 优化:BIRCH 基于距离度量,合并相似的子聚类,从而优化树形结构。

BIRCH 聚类的 Python 实现

要在 Python 中实现 BIRCH 聚类,可使用 scikit-learn 库。该库提供了实现 BIRCH 算法的 Birch 类。

pip install numpy scikit-learn matplotlib

以下是使用 Birch 类对数据集进行聚类的示例:

示例1

from sklearn.datasets import make_blobs from sklearn.cluster import Birch import matplotlib.pyplot as plt # 生成样本数据 X, y = make_blobs(n_samples=1000, centers=10, cluster_std=0.50, random_state=0) # 使用BIRCH聚类数据 birch = Birch(threshold=1.5, n_clusters=4) birch.fit(X) labels = birch.predict(X) # 绘制结果 plt.figure(figsize=(7.5, 3.5)) plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='winter') plt.show()

在该示例中,首先使用 scikit-learn 库中的 make_blobs 函数生成样本数据集。然后,使用 BIRCH 算法对数据集进行聚类:实例化一个 Birch 对象,将阈值(threshold)参数设置为 1.5,聚类数量(n_clusters)参数设置为 4;接着使用 fit 方法将 Birch 对象拟合到数据集,并用 predict 方法预测聚类标签;最后通过散点图绘制聚类结果。

输出结果

运行上述程序后,将生成以下散点图作为输出:

纵轴范围:10.0、7.5、5.0、2.5、0.0、-2.5、-5.0、-7.5、-10.0

横轴范围:-10、0、5、10

示例2

import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_blobs from sklearn.cluster import Birch from sklearn.metrics import adjusted_rand_score # 1. 生成模拟数据(大规模数据集,模拟真实场景) # n_samples=100000 模拟百万级数据,n_features=2 方便可视化 X, y_true = make_blobs( n_samples=100000, # 10万样本 n_features=2, # 2个特征 centers=5, # 5个真实聚类中心 cluster_std=1.0, random_state=42 ) # 2. 初始化 BIRCH 模型 # 关键参数说明: # - threshold:CF 节点的距离阈值(越小聚类越细,内存占用越高) # - n_clusters:最终聚类的数量(设为None时仅生成CF树,不做全局聚类) # - branching_factor:CF Tree 的分支因子(节点最大容量) birch = Birch( threshold=0.5, # 距离阈值 branching_factor=50, # 分支因子 n_clusters=5 # 最终聚类数(与真实中心数一致) ) # 3. 训练模型并预测 y_pred = birch.fit_predict(X) # 4. 评估聚类效果(调整兰德指数,取值[-1,1],越接近1效果越好) ari = adjusted_rand_score(y_true, y_pred) print(f"调整兰德指数(ARI):{ari:.4f}") # 5. 可视化聚类结果(随机采样1000个样本,避免绘图卡顿) np.random.seed(42) sample_idx = np.random.choice(len(X), 1000, replace=False) X_sample = X[sample_idx] y_pred_sample = y_pred[sample_idx] plt.figure(figsize=(8, 6)) plt.scatter(X_sample[:, 0], X_sample[:, 1], c=y_pred_sample, cmap='viridis', s=10, alpha=0.8) plt.title(f'BIRCH 聚类结果 (ARI={ari:.4f})', fontsize=12) plt.xlabel('特征1') plt.ylabel('特征2') plt.colorbar(label='聚类标签') plt.show()

代码解释

  • 数据生成:用make_blobs生成 10 万条二维数据,模拟 5 个聚类中心的大规模数据集;
  • 模型参数
    • threshold:核心参数,控制 CF 节点的紧凑度,阈值越小,聚类越精细,但内存占用和计算时间会增加;
    • n_clusters:指定最终聚类数量,若设为None,BIRCH 仅生成 CF 树,需后续手动对叶子节点聚类;
  • 评估指标:调整兰德指数(ARI)消除了随机聚类的影响,更适合评估聚类效果;
  • 可视化:随机采样部分样本绘图,避免大规模数据绘图卡顿。

输出结果

运行代码后,会输出 ARI(通常接近 1,说明聚类效果好),并显示聚类散点图,不同颜色代表不同聚类。

BIRCH 聚类的优点

与其他聚类算法相比,BIRCH 聚类具有以下优点:

  • 可扩展性:BIRCH 采用树形结构表示聚类,专为高效处理大型数据集而设计。
  • 内存效率高:BIRCH 使用聚类特征(CF)和子聚类特征(SCF)数据结构汇总数据点的统计特性,减少了存储聚类所需的内存。
  • 聚类速度快:BIRCH 采用增量式聚类方法,能够快速对数据点进行聚类。

BIRCH 聚类的缺点

BIRCH 聚类也存在一些缺点:

  • 对参数设置敏感:BIRCH 聚类的性能易受参数选择的影响,例如节点中可存储的最大聚类特征(CF)数量以及用于创建子聚类的阈值等参数。
  • 处理非球形聚类的能力有限:BIRCH 假设聚类为球形结构,因此对于包含非球形聚类的数据集,其性能可能不佳。
  • 距离度量选择的灵活性有限:BIRCH 默认使用欧氏距离度量,该度量方法并非适用于所有数据集。

适用场景

  • 大规模数据集(百万级以上样本)的快速聚类;
  • 内存有限的环境(如单机处理大数据);
  • 初步聚类(作为其他聚类算法的前置步骤,先压缩数据再精细聚类)。

总结

  1. BIRCH 是专为大规模数据设计的层次聚类算法,核心是通过 CF Tree 压缩数据,大幅降低计算和内存成本;
  2. 关键参数是threshold(距离阈值)和n_clusters(最终聚类数),需根据数据调优;
  3. 优势是高效、内存友好,适合大规模数据的快速聚类;缺点是对高维、非凸聚类效果差。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/15 12:08:44

S32DS工程重命名常见问题解决指南

S32DS工程重命名踩坑实录:一次文件夹改名引发的“编译灾难”如何安全化解?你有没有过这样的经历?手头有个跑通了电机控制的S32K144项目,叫MotorCtrl_Demo。现在要开发水泵控制,顺手复制一份工程,把文件夹改…

作者头像 李华
网站建设 2026/3/26 4:02:53

万物识别模型解释性分析:可视化工具一键部署指南

万物识别模型解释性分析:可视化工具一键部署指南 作为一名AI研究员,你是否遇到过这样的困境:模型在识别某些物体时表现不佳,却苦于无法直观理解其决策过程?万物识别模型的解释性分析正是解决这一痛点的关键技术。本文将…

作者头像 李华
网站建设 2026/3/26 5:58:29

如何快速下载B站字幕:新手终极操作指南

如何快速下载B站字幕:新手终极操作指南 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 还在为无法保存B站视频的字幕而烦恼吗?你是否遇到过…

作者头像 李华
网站建设 2026/3/26 1:43:00

GEOS-Chem大气模拟从零到一:10个高效配置技巧

GEOS-Chem大气模拟从零到一:10个高效配置技巧 【免费下载链接】geos-chem GEOS-Chem "Science Codebase" repository. Contains GEOS-Chem science routines, run directory generation scripts, and interface code. This repository is used as a submo…

作者头像 李华
网站建设 2026/3/26 22:41:28

Windows触控板三指拖拽完整指南:轻松实现MacBook级操作体验

Windows触控板三指拖拽完整指南:轻松实现MacBook级操作体验 【免费下载链接】ThreeFingerDragOnWindows Enables macOS-style three-finger dragging functionality on Windows Precision touchpads. 项目地址: https://gitcode.com/gh_mirrors/th/ThreeFingerDra…

作者头像 李华
网站建设 2026/3/24 6:41:30

RuoYi-Flowable工作流管理系统终极安装配置指南

RuoYi-Flowable工作流管理系统终极安装配置指南 【免费下载链接】RuoYi-flowable 基RuoYi-vue flowable 6.7.2 的工作流管理 右上角点个 star 🌟 持续关注更新哟 项目地址: https://gitcode.com/gh_mirrors/ru/RuoYi-flowable 在当今企业数字化转型的浪潮中…

作者头像 李华