【机器学习基础】层次聚类-BIRCH聚类

🚀个人主页:为梦而生~ 关注我一起学习吧!
💡专栏:机器学习 欢迎订阅!相对完整的机器学习基础教学!
特别提醒:针对机器学习,特别开始专栏:机器学习python实战 欢迎订阅!本专栏针对机器学习基础专栏的理论知识,利用python代码进行实际展示,真正做到从基础到实战!
💡往期推荐
【机器学习基础】一元线性回归(适合初学者的保姆级文章)
【机器学习基础】多元线性回归(适合初学者的保姆级文章)
【机器学习基础】决策树(Decision Tree)
【机器学习基础】K-Means聚类算法
【机器学习基础】DBSCAN
【机器学习基础】支持向量机
【机器学习基础】集成学习
💡本期内容:BIRCH(Balanced Iterative Reducing and Clustering using Hierarchies)是一种用于大规模数据集的层次聚类算法。它采用一种多层次的聚类方法,首先利用一种称为“聚类特征树(CF Tree)”的数据结构来压缩数据集,然后通过逐步分裂每个节点以形成聚类。


文章目录

  • 1 引言
    • 1.1 聚类分析的重要性和应用场景
    • 1.2 层次聚类和BIRCH聚类的发展背景
  • 2 层次聚类概述
    • 2.1 层次聚类的定义及其基本思想
    • 2.2 层次聚类的优缺点分析
  • 3 BIRCH聚类算法介绍
    • 3.1 BIRCH算法的基本概念
    • 3.2 BIRCH算法的核心思想:使用树状结构(CF Tree)存储和聚类数据
    • 3.3 聚类特征树(CF Tree)的生成
  • 4 BIRCH聚类算法的优势和局限性
  • 5 BIRCH聚类算法的应用实例


1 引言

1.1 聚类分析的重要性和应用场景

聚类分析是一种重要的数据分析技术,其重要性和应用场景主要体现在以下几个方面:

重要性

  1. 发现隐藏模式与规律:聚类分析能够帮助我们从大量数据中发现隐含的模式和规律,从而提高数据的利用价值。
  2. 数据预处理:聚类分析经常作为数据挖掘的预处理步骤,将数据转化为更适合分类或回归的形式。
  3. 自动分组:它是一种无监督学习方法,能够自动对数据进行分组,将相似的数据归为同一组,不相似的数据归为不同的组。

应用场景

  1. 商业智能分析:聚类分析可以将客户群体分成不同的类别,从而帮助企业开展更有针对性的营销活动。例如,市场分析人员可以通过聚类分析从客户数据库中识别出不同的客户群,并使用购买模式来描述这些客户群的特征。
  2. 电商购物推荐:聚类分析可以将相似的用户或商品聚类在一起,使得推荐系统能够提供更精准的推荐服务。
  3. 生物信息学:聚类分析可以用于推导植物和动物的分类,对基因进行分析,从而帮助科学家获得对种群中固有结构的认识。
  4. 图像分析:聚类分析可以用于图像分割和识别,帮助我们从复杂的图像中识别出不同的对象或特征。
  5. 社会网络分析:聚类分析可以帮助我们识别社会网络中的不同群体或社区,从而更好地理解网络结构。
  6. 时序数据分析和复杂网络社团发现:聚类分析也可以应用于时序数据分析和复杂网络的社团发现,帮助我们从大量数据中提取有用的信息。

1.2 层次聚类和BIRCH聚类的发展背景

层次聚类(Hierarchical Clustering)是一种聚类分析方法,它的基本思想是将数据集中的样本看作一棵树的叶子,然后通过不断合并或分裂叶子节点,形成一棵聚类树。

这棵树的每一个内部节点表示一个聚类,而叶子节点表示单个的样本。根据聚类方式的不同,层次聚类可以分为凝聚的层次聚类和分裂的层次聚类

凝聚的层次聚类自底向上的方法,开始时将每个样本看作一个聚类,然后不断合并最近的聚类,直到满足某个终止条件;而分裂的层次聚类则是自顶向下的方法,开始时将所有样本看作一个聚类,然后不断分裂最远的样本,直到满足某个终止条件。

在这里插入图片描述

BIRCH算法是在1996年由Tian Zhang提出来的,它是一种基于距离的层次聚类方法,综合了层次凝聚和迭代的重定位方法。层次凝聚是采用自底向上策略,将每个对象作为一个原子簇,然后合并这些原子簇形成更大的簇,减少簇的数目,直到所有的对象都在一个簇中或满足某个终结条件。

随着大数据时代的到来,处理大规模数据集成为了聚类算法的重要挑战之一。BIRCH算法作为一种高效的层次聚类方法,在处理大规模数据集时具有显著的优势。它能够有效地利用有限的内存资源完成高质量的聚类,并且可以通过单遍扫描数据集来最小化I/O代价。因此,BIRCH算法在各个领域得到了广泛的应用和研究。

总之,BIRCH算法是一种基于层次的聚类方法,通过使用聚类特征和聚类特征树来概括和存储聚类信息,从而实现了高效且高质量的聚类。它在处理大规模数据集时具有显著的优势,并且可以广泛应用于各个领域的聚类分析问题中。


2 层次聚类概述

2.1 层次聚类的定义及其基本思想

层次聚类的定义

层次聚类(Hierarchical Clustering)是一种聚类算法,它的核心思想是通过计算不同类别数据点间的相似度来创建一棵有层次的嵌套聚类树。在这棵聚类树中,不同类别的原始数据点是树的最低层,而树的顶层是一个聚类的根节点。这种聚类方法可以看作是一个树状的聚类结构,数据点或聚类从下到上不断被合并,或者从上到下不断被分裂。

层次聚类的基本思想

层次聚类通过某种相似性测度计算节点之间的相似性,并按相似度由高到低排序。根据聚类方式的不同,可以分为凝聚的层次聚类和分裂的层次聚类。

  1. 凝聚的层次聚类(自下而上的方法):开始时,每个样本或数据点都被视为一个单独的聚类。然后,算法计算所有聚类之间的距离或相似度,并选择最近或最相似的两个聚类进行合并。这个过程不断重复,直到所有的聚类合并为一个,或者达到预设的聚类数目,或者聚类之间的距离超过某个阈值。
  2. 分裂的层次聚类(自上而下的方法):与凝聚的方法相反,开始时,所有的样本或数据点都被视为一个单一的聚类。然后,算法选择距离最远或最不相似的样本对,并将它们分别分裂为新的聚类。这个过程不断重复,直到每个聚类中只有一个样本,或者达到预设的聚类数目,或者样本之间的距离小于某个阈值。

层次聚类的优点在于它可以随时停止划分,并且能够形成层次结构,使用户可以观察和理解数据的不同层次的结构。然而,由于它需要计算所有样本或聚类之间的距离或相似度,因此在处理大规模数据集时可能会变得非常耗时。

2.2 层次聚类的优缺点分析

优点

  1. 能够发现类的层次关系:层次聚类可以通过合并或分裂操作,逐步构建或细化聚类结构,从而展示数据点之间的层次关系。这对于理解数据的组织结构非常有帮助。
  2. 对样本输入顺序不敏感:与一些其他聚类算法相比,层次聚类对样本的输入顺序不太敏感,这意味着即使改变样本的输入顺序,聚类结果也可能保持相对稳定。
  3. 能够处理任意形状的聚类:层次聚类不依赖于数据的分布假设,因此它可以处理各种形状的聚类,包括非凸形状和复杂结构。

缺点

  1. 计算复杂度较高:层次聚类需要计算所有样本或聚类之间的距离或相似度,这导致它在处理大规模数据集时可能变得非常耗时。此外,合并或分裂操作也可能导致计算量的增加。
  2. 可能形成链状聚类:在某些情况下,层次聚类可能会形成链状结构,即一些聚类在合并过程中可能会成为其他聚类的子聚类,这可能导致聚类结果的不稳定或难以解释。
  3. 聚类终止条件难以确定:层次聚类需要指定一个终止条件来确定何时停止合并或分裂操作。然而,确定这个条件可能是一个困难的任务,因为不同的终止条件可能会导致不同的聚类结果。

3 BIRCH聚类算法介绍

3.1 BIRCH算法的基本概念

BIRCH(Balanced Iterative Reducing and Clustering Using Hierarchies)聚类是一种增量式的层次聚类方法。

它通过使用一个叫做CF Tree(聚类特征树)的树结构来概括聚类特征,从而实现有效的聚类和规约。

BIRCH聚类的主要优点是它可以处理大规模的数据集,并且对异常值有很好的鲁棒性。它通过将数据集中的点进行聚类,将分布在稠密区域中的点聚为一类,而将分布在稀疏区域中的点视为异常点进行移除。

此外,BIRCH聚类是一种增量式的聚类方法,这意味着它可以在处理新数据时,基于已经处理过的数据点进行聚类决策,而不是重新计算所有的数据点。

在这里插入图片描述

3.2 BIRCH算法的核心思想:使用树状结构(CF Tree)存储和聚类数据

BIRCH算法的核心思想使用树状结构(CF Tree,即聚类特征树)来存储和聚类数据。这种树状结构的设计使得算法能够有效地处理大规模数据集,同时保持聚类的质量和效率。

CF Tree中的每个节点都由一个或多个聚类特征(CF)组成,这些CF是算法用于概括和存储聚类信息的关键。CF是一个三元组,包括簇中样本点的数量、各特征维度的和向量以及各特征维度的平方和,它用于存储关于簇的基本信息,同时实现了数据的压缩。

在这里插入图片描述

通过CF Tree,BIRCH算法可以在有限的内存资源下进行高质量的聚类。算法通过不断插入新的数据点,并根据CF Tree的结构进行聚类的合并和分裂,从而逐步构建出完整的聚类结构。此外,由于CF Tree的高度平衡性,算法可以在对数时间内完成聚类操作,进一步提高了聚类的效率。

因此,使用树状结构(CF Tree)来存储和聚类数据是BIRCH算法的核心思想,这种思想使得算法在处理大规模数据集时具有显著的优势,并且广泛应用于各个领域的聚类分析问题中。

3.3 聚类特征树(CF Tree)的生成

  1. 从根节点root 开始递归往下,计算当前CF条目与要插入数据点之间的距离,寻找距离最小的那个路径,直到找到与该数据点最接近的叶节点中的条目。
  2. 比较计算出的距离是否小于阈值T,如果小于则当前CF条目吸收该数据点,并更新路径上的所有CF三元组;反之,进行第三步。
  3. 判断当前条目所在叶节点的CF条目个数是否小于λ,如果是,则直接将数据点插入作为该数据点的新条目,否则需要分裂该叶节点。分裂的原则是寻找该叶节点中距离最远的两个CF条目并以这两个CF条目作为种子,其他剩下的CF条目根据距离最小原则分配到这两个簇中,并更新整个CF树。
  4. 依次向上检查父节点是否也要分裂,如果需要按和叶子节点分裂方式相同。

在这里插入图片描述

先定义好CF Tree的参数: 即枝平衡因子β(内部节点的最大CF数), 叶平衡因子λ(叶子节点的最大CF数),空间阈值τ( 叶节点每个CF的最大样本半径或直径)

在最开始的时候,CF Tree是空的,没有任何样本,我们从训练集读入第一个样本点,将
它放入一个新的CF三元组A,这个三元组的N=1,将这个新的CF放入根节点

在这里插入图片描述
继续读入第二个样本点,我们发现这个样本点和第一个样本点A,在半径为T的超球体范围内,也就是说,他们属于一个CF,我们将第二个点也加入CF A,此时需要更新A的三元组的值。此时A的三元组中N=2,如下图一

在这里插入图片描述
读入第三个样本点,若我们发现这个点不能融入刚才前面的样本点形成的超球体内,就需要
一个新的CF三元组B。此时根节点有两个CF三元组A和B,如上图二

读入第四个样本点,若发现和B在半径小于T的超球体内,继续更新

在这里插入图片描述

什么时候CF Tree的节点需要分裂呢?

假设我们现在的CF Tree 如下图, 节点LN1有三个CF, LN2和LN3各有两个CF。我们的叶子节点的最大CF数λ=3。此时一个新的样本点来了,计算得出它离LN1中的叶子节点最近,那么开始判断它是否在sc1,sc2,sc3。这3个CF对应的超球体之内,因不在,故需要建立一个新的CF,即sc8来容纳它。

但我们的λ=3,也就是说LN1的CF个数已经达到最大值了,不能再创建新的CF了,此时就要将LN1节点一分为二了

在这里插入图片描述
将LN1里所有CF元组中,找到两个最远的CF做为种子CF,然后将LN1节点里所有CF 即sc1, sc2, sc3,以及新样本点的新元组sc8划分到两个新的节点上。将LN1节点划分后的CF Tree如下图

在这里插入图片描述
若内部节点的最大CF数β=3,则此时会导致最大CF数超了,也就是说要继续,方法与前面一样,分裂后的CF Tree如下图
在这里插入图片描述


4 BIRCH聚类算法的优势和局限性

算法优点

  1. 节省内存。叶子节点放在磁盘分区上,非叶子节点仅仅是存储了一个CF值,外加指向父节点和孩子节点的指针。
  2. 快, 计算两个簇的距离只需要用到(N,LS,SS)这三个值足矣。
  3. 只需扫描一遍数据集即可建树。
  4. 可识别噪声点。建立好CF树后把那些包含数据点少的子簇剔除。

算法缺点

  1. 结果依赖于数据点的插入顺序。
  2. 对非球状的簇聚类效果不好。

5 BIRCH聚类算法的应用实例

  1. 社交网络分析:在社交网络中,用户的行为和关系可以形成大规模的数据集。使用BIRCH聚类算法,可以有效地识别出社交网络中的不同群体或社区,从而帮助研究人员或企业更好地理解用户行为,优化产品设计或服务。
  2. 电商推荐系统:在电商领域,用户的历史购买记录、浏览记录等行为数据可以形成大规模的数据集。通过应用BIRCH聚类算法,可以将相似的用户或商品聚类在一起,从而实现更精准的推荐服务。同时,算法还可以帮助商家发现潜在的客户群体和市场趋势。
  3. 金融风险管理:在金融领域,大量的交易数据、客户信息等数据需要进行有效的分析和处理。BIRCH聚类算法可以帮助金融机构识别出异常交易或客户行为,从而及时发现和防范金融风险。
  4. 图像分割和识别:在图像处理领域,BIRCH聚类算法可以用于图像分割和识别。算法可以将图像中的像素或区域聚类在一起,从而形成不同的对象或特征。这有助于实现更准确的图像识别和目标检测。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/713850.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matplotlib.animation 3d姿态动画

目录 演示效果: 演示代码: 保存为gif 演示效果: 演示代码: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib.animation import FuncAnimation# 定义人体关键点…

网络防御第6次作业

防病毒网关 按照传播方式分类 病毒 病毒是一种基于硬件和操作系统的程序,具有感染和破坏能力,这与病毒程序的结构有关。病毒攻击的宿主程序是病毒的栖身地,它是病毒传播的目的地,又是下一次感染的出发点。计算机病毒感染的一般过…

动态规划(算法竞赛、蓝桥杯)--分组背包DP

1、B站视频链接&#xff1a;E16 背包DP 分组背包_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N110; int v[N][N],w[N][N],s[N]; // v[i,j]:第i组第j个物品的体积 s[i]:第i组物品的个数 int f[N][N]; // f[i,j]:前i组物品&#xff0c;能放…

基带信号处理设计原理图:2-基于6U VPX的双TMS320C6678+Xilinx FPGA K7 XC7K420T的图像信号处理板

基于6U VPX的双TMS320C6678Xilinx FPGA K7 XC7K420T的图像信号处理板 综合图像处理硬件平台包括图像信号处理板2块&#xff0c;视频处理板1块&#xff0c;主控板1块&#xff0c;电源板1块&#xff0c;VPX背板1块。 一、板卡概述 图像信号处理板包括2片TI 多核DSP处理…

Linux进程管理:(二)进程调度原语

文章说明&#xff1a; Linux内核版本&#xff1a;5.0 架构&#xff1a;ARM64 参考资料及图片来源&#xff1a;《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址&#xff1a; zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 进程调度的概念比较简单&#xff0c…

QPS 提升 10 倍!滴滴借助 StarRocks 物化视图实现低成本精确去重

作者&#xff1a;滴滴 OLAP 开发工程师 刘雨飞 小编导读&#xff1a; 滴滴于 2022 年引入了 StarRocks。经过一年多的努力&#xff0c;StarRocks 逐渐替代了原有技术栈&#xff0c;成为滴滴内部主要的 OLAP 引擎。截至 2023 年 12 月&#xff0c;滴滴已经成功建立了超过 40 个 …

Cesium插件系列——3dtiles压平

本系列为自己基于cesium写的一套插件具体实现。 这里是根据Cesium提供的CustomShader来实现的。 在CustomShader的vertexShaderText里&#xff0c;需要定义vertexMain函数&#xff0c;例如下&#xff1a; struct VertexInput {Attributes attributes;FeatureIds featureIds;…

LVGL常用部件使用总结之图片部件

图片部件可用于显示图片&#xff0c;图片源可以是 C 语言数组格式的文件、二进制的.bin 文件以及图标字体。值得注意的是&#xff0c;图片部件要显示 BMP、JPEG 等格式的图片&#xff0c;则必须经过解码。 图片部件的组成部分仅有一个&#xff1a;主体&#xff08;LV_PART_MAIN…

URI到底是个啥

URI是统一资源标识符&#xff08;Uniform Resource Identifier&#xff09;&#xff0c;URL是统一资源定位符&#xff08;Uniform Resource Locator&#xff09;。 具体如何标记和区分服务器上的资源用的其实就是URI&#xff0c;因为其经常出现在浏览器的地址栏里&#xff0c;…

Verilog(未完待续)

Verilog教程 这个教程写的很好&#xff0c;可以多看看。本篇还没整理完。 一、Verilog简介 什么是FPGA&#xff1f;一种可通过编程来修改其逻辑功能的数字集成电路&#xff08;芯片&#xff09; 与单片机的区别&#xff1f;对单片机编程并不改变其地电路的内部结构&#xff0…

Parallel Computing - 一文讲懂并行计算

目录 Throughput/LatencySerial ComputingParallel ComputingTypes of parallel computersSimple 4-width SIMDAmdahls lawTypes of parallelism**Data Parallel Model**Task parallel PartitioningDomain DecompositionFunctional Decomposition CommunicationsExample that d…

java调用chatgpt接口,实现专属于自己的人工智能助手

文章目录 前言导包基本说明请求参数响应参数创建请求和响应的VO类 代码编写使用最后说明 前言 今天突然突发奇想&#xff0c;就想要用java来调用chatget的接口&#xff0c;实现自己的聊天机器人&#xff0c;但是网上找文章&#xff0c;属实是少的可怜(可能是不让发吧)。找到了…

ESP32 web 对接华为云平台--MQTT协议

文章目录 前言一、MQTT协议二、如何使用MQTT协议对接华为云1.注册华为云账号2.设备接入中创建资源空间3.如何连接4.通过MQTT.fx工具做初步对接4.1 设置连接信息4.2 连接平台 5.查看平台设备信息 三. 设备测对接平台1.ESP测引入MQTT库2.编码2.1前端编码修改2.2 后端接口修改 3.M…

element-plus+vue3表单含图片(可预览)(线上图片)

一、要实现的效果&#xff1a; 二、如果期间出现这样的效果&#xff08;表格穿透过来了&#xff09;&#xff0c;加上了这行代码就可以了&#xff1a; preview-teleported“true” 如果仅测试用&#xff0c;建议使用线上图片链接的形式&#xff0c;免得本地地址不生效&#xf…

yolov9从头开始训练

yolov9从头开始训练 一、准备数据集 数据集相关文件存放布局如下 yolov9-datasets ├── train │ ├── images │ │ ├── image.jpg │ │ ├── │ └── labels │ ├── image.txt │ ├── ├── valid │ ├── images │ │ ├── image.jpg │ │ ├─…

吴恩达deeplearning.ai:模型选择交叉验证测试集的训练方法

以下内容有任何不理解可以翻看我之前的博客哦&#xff1a;吴恩达deeplearning.ai专栏 在上一节中&#xff0c;我们了解了如何利用测试集来评估模型性能。今天我们来进一步完善这个想法&#xff0c;让你使用该技术自动选择一个更好的模型。 文章目录 模型选择交叉验证 Cross Va…

SpringBoot 框架(上)

SpringBoot SpringBoot概述依赖管理自动配置SpringBoot 注解使用ConfigurationImport(value {Cat.class,Dog.class})ImportResource(locations "classpath:beans.xml") yaml 标记语言概述基本语法数据类型字面量对象数组 使用细节 Rest 风格请求处理概述注意事项 接…

vue2 开发记录

el-select 如何修改选择项的样式/el-select-dropdown__item 文字上下显示 测试代码 <div stylemargin-left: 100px><!-- 测试代码--><el-select filterablesizemini><div classxxx-el-select><el-optionv-foritem in [{key:1,des:2,…

AVT Prosilica GC Vision Cameras 相机视觉说明使用安装。具体详情内容可参看PDF目录内容。

AVT Prosilica GC Vision Cameras 相机视觉说明使用安装。具体详情内容可参看PDF目录内容。

TikTok矩阵系统功能怎么写?常用源代码是什么?

TikTok矩阵系统的功能是如何编写的?又有哪些常用的源代码支撑这些功能呢?本文将通过五段源代码的分享&#xff0c;为大家揭开TikTok矩阵系统的神秘面纱。 一、TikTok矩阵系统的核心功能 TikTok的矩阵系统涵盖了多个核心功能&#xff0c;包括但不限于用户管理、内容分发、推…