当前位置: 首页 > news >正文

机器学习 - 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. 优势是高效、内存友好,适合大规模数据的快速聚类;缺点是对高维、非凸聚类效果差。
http://www.jsqmd.com/news/209264/

相关文章:

  • OpenDog V3开源四足机器人完全手册:从零打造智能机器伙伴
  • GEOS-Chem大气化学模型终极指南:从零开始的完整配置教程
  • SFML多媒体库终极开发环境搭建教程
  • AUTOSAR网络管理协议栈配置实战案例(从零实现)
  • 澳门科技大学研究项目采用Qwen3Guard-Gen-8B分析葡语内容
  • Keil uVision5目标芯片选型与配置核心要点
  • 模型即服务:万物识别的一站式部署方案
  • Windows更新故障快速修复神器:一键解决卡顿与错误代码
  • 中国科学技术大学学位论文LaTeX模板完全使用手册
  • SubtitleOCR:快如闪电的视频硬字幕提取神器
  • 如何快速下载歌词:跨平台歌词提取工具完整指南
  • AI识别新体验:30分钟搞定中文通用物体检测服务
  • SFML多媒体库终极指南:从入门到精通
  • RuoYi-Flowable工作流管理系统:企业级流程自动化的完整部署指南
  • AI识别竞赛必备:云端GPU环境极速配置攻略
  • Windows Syslog服务器终极指南:5步搭建免费企业级日志监控系统
  • Windows日志监控的革命性解决方案:开源Syslog服务器深度实践
  • 无名杀网页版三国杀:终极免费体验完整指南
  • 厦门大学LaTeX论文模板终极指南:告别格式烦恼的排版利器
  • 跨平台解决方案:一次部署到处运行的万物识别服务
  • 上海AI大会现场体验Qwen3Guard-Gen-8B实时内容审核演示
  • RuoYi-Flowable工作流管理系统终极安装配置指南
  • RuoYi-Flowable-Plus:让你30分钟搞定企业级工作流开发
  • GEOS-Chem大气化学模型实战指南:从零开始构建全球环境模拟系统
  • 仿写文章生成Prompt:打造专业开源项目技术文档
  • VRCT:重新定义VRChat跨语言交流的新范式
  • RuoYi-Flowable工作流管理系统终极部署指南:30分钟从零到精通
  • 生成RDP Wrapper技术指南的AI写作Prompt
  • 智能零售实战:用预置镜像快速部署商品识别系统
  • Windows系统精简革命:3步打造专属纯净系统的终极指南