聚类算法之层次聚类(Hierarchical Clustering)

news2024/12/28 19:35:03

注意:本文引用自专业人工智能社区Venus AI

更多AI知识请参考原站 ([www.aideeplearning.cn])

层次聚类是一种非常独特和强大的聚类方法,与众多其他的聚类技术相比,它不仅为数据集提供了一个划分,还给出了一个层次结构,这在某些应用中是非常有价值的。在生物信息学、社会网络分析、市场研究等领域,层次聚类方法被广泛采用,因为它们能够揭示数据的深层结构和关系。

DALL·E 2023-11-22 14.23.51 - Illustration of a hierarchical clustering dendrogram in a 6x5 format. This wide graph should depict a tree-like structure with branches connecting var

1. 算法解读:

层次聚类是一种树形方法,旨在建立一个分层的聚类结构。这种结构通常呈现为一个称为“树状图”(Dendrogram)的树形图,其中数据的每一项都位于树的叶子上,然后通过不断地合并或分裂,最终形成一个树形的聚类层次。

2. 步骤和细节:

凝聚型 (Agglomerative):

开始: 每个数据点都是一个聚类,因此有N个聚类(其中N是数据点的数量)。

迭代:在每一步,找到最近的两个聚类并合并它们,因此聚类的数量减少一个。

结束:最后只剩下一个包含所有数据点的聚类。

分裂型 (Divisive):

开始: 所有数据点都属于一个大的聚类。

迭代:在每一步,选择一个聚类并将其分割为两个子聚类。

结束:最后每个数据点都成为自己的聚类。

3. 举例:

假设我们有四种不同的物种:A、B、C和D,我们已经测量了它们在某些条件下的基因表达水平。我们的目标是使用层次聚类来探索这些物种之间的相似性,并了解它们之间的进化关系。

考虑我们有以下物种的基因表达数据:

物种A:[1, 2, 3]

物种B:[2, 3, 4]

物种C:[5, 6, 7]

物种D:[8, 9, 10]

我们希望基于这些基因表达数据来理解这四个物种之间的相似性。

凝聚性的流程如下:

步骤1:开始时,每个物种都被视为一个单独的聚类,即我们有四个聚类:{A}、{B}、{C}和{D}。

步骤2:计算每对聚类之间的距离。在这个例子中,我们可以计算每对物种基因表达数据之间的欧几里得距离。找到距离最近的两个聚类,并将它们合并为一个新的聚类。假设物种A和物种B的距离最近,我们将它们合并为一个新的聚类{A, B}。现在我们有三个聚类:{A, B}、{C}和{D}。

步骤3:继续计算新聚类与其他聚类之间的距离,并合并距离最近的两个聚类。假设{A, B}和{C}之间的距离最近,我们将它们合并为一个新的聚类{A, B, C}。现在我们有两个聚类:{A, B, C}和{D}。

步骤4:最后,我们将剩下的两个聚类{A, B, C}和{D}合并为一个聚类{A, B, C, D}。

通过这个过程,我们构建了一个树状图(Dendrogram),展示了这四个物种之间的相似性和层次结构,从而帮助我们理解它们的进化关系。

分裂性的流程如下:

步骤1:开始时,所有物种都属于一个大的聚类,即我们有一个聚类:{A, B, C, D}。

步骤2:选择一个聚类并将其分裂为两个子聚类。在这个例子中,我们可以使用一种方法(如k-means聚类)来确定如何将大聚类分裂。假设我们将{A, B, C, D}分裂为两个聚类:{A, B}和{C, D}。

步骤3:继续选择一个聚类并将其分裂。例如,我们可以进一步将{A, B}分裂为两个聚类:{A}和{B},同时,将{C, D}分裂为两个聚类:{C}和{D}。

步骤4:最后,每个物种都成为自己的聚类,即我们得到四个聚类:{A}、{B}、{C}和{D}。

通过这个过程,我们同样构建了一个树状图(Dendrogram),展示了这四个物种之间的相似性和层次结构,帮助我们理解它们的进化关系,但是这次是通过分裂的方式进行的。

代码示例:

我们可以使用Python的scipy库来演示层次聚类的凝聚型和分裂型方法。下面是一个简单的代码示例,展示了如何使用这两种方法进行层次聚类。

我们将演示凝聚型层次聚类:

import numpy as np

from scipy.cluster.hierarchy import dendrogram, linkage, cut_tree

import matplotlib.pyplot as plt

# 定义基因表达数据

data = np.array([

    [1, 2, 3],  # 物种A

    [2, 3, 4],  # 物种B

    [5, 6, 7],  # 物种C

    [8, 9, 10]  # 物种D

])

# 使用“ward”方法进行凝聚型层次聚类

linked = linkage(data, 'ward')

# 绘制树状图

plt.figure(figsize=(10, 7))

dendrogram(linked, labels=['A', 'B', 'C', 'D'])

plt.title('Agglomerative Hierarchical Clustering Dendrogram')

plt.xlabel('Species')

plt.ylabel('Euclidean distances')

plt.show()

4. 算法评价:

优点:

动态聚类数:不需要预先指定聚类数,可以根据树状图切割得到任意数量的聚类。

解释性:通过层次结构,研究者可以更加直观地看到数据的层次和结构,从而获得更深入的洞察。

缺点:

计算复杂度:尤其是凝聚型方法,随着数据点数量的增加,计算复杂度急剧上升。

大数据集不友好:由于其高计算复杂度,不推荐在大数据集上使用。

5. 算法的变体:

凝聚型 (Agglomerative):

凝聚型层次聚类有多种变体,这些变体主要基于不同的距离度量方法和链结标准来定义。以下是一些常见的变体:

最近邻链结(Single Linkage):

定义:最近邻链结法中,两个聚类之间的距离被定义为这两个聚类中最近两个点之间的距离。

优点:能够处理非球形的聚类和不同大小的聚类。

缺点:对噪声和异常点敏感,容易产生链状效应。

最远邻链结(Complete Linkage):

定义:最远邻链结法中,两个聚类之间的距离被定义为这两个聚类中最远两个点之间的距离。

优点:能够较好地处理噪声和异常点,减少链状效应。

缺点:倾向于生成大小相近的聚类,可能会忽略真实的聚类结构。

平均链结(Average Linkage):

定义:平均链结法中,两个聚类之间的距离被定义为这两个聚类中所有点对之间距离的平均值。

优点:综合了最近邻链结和最远邻链结的优点,适用于多种类型的数据集。

缺点:计算复杂度相对较高。

Ward链结(Ward’s Method):

定义:Ward链结法中,两个聚类合并后产生的方差增加值被用作这两个聚类之间的距离。

优点:通常能够生成较为均匀大小的聚类。

缺点:可能会忽略不同大小的真实聚类结构。

分裂型 (Divisive):

分裂型层次聚类较少使用,但在某些特定的应用中可能更有优势。其变体主要基于如何选择待分裂的聚类和如何进行分裂:

基于直径的分裂:

定义:选择直径(最远内部点之间的距离)最大的聚类进行分裂。

应用:适用于当聚类的直径差异较大时。

基于密度的分裂:

定义:选择点的密度(例如,点的数量或平均距离)最低的聚类进行分裂。

应用:适用于当聚类的密度差异较大时。

分裂型层次聚类虽然较少使用,但在特定应用中有其独特优势。例如,在生物信息学中,分裂型方法可用于基于基因表达模式的样本分类。此外,分裂型和凝聚型层次聚类可以相互补充,在某些情况下,结合使用这两种方法可能会得到更好的聚类结果。

与其他聚类算法的比较:

层次聚类与如k-means聚类等其他非层次聚类算法相比,有其独特之处。层次聚类不需要预先指定聚类数目,能够直观地通过树状图展示数据的层次结构,适合于探索性数据分析。但是,层次聚类的计算复杂度通常较高,可能不适合于大规模数据集。

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

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

相关文章

3d模型文件导入时没颜色---模大狮模型网

导入3D模型文件时没有颜色显示通常是由于软件在显示模型时未正确解释颜色信息。这可能是由于模型文件本身没有包含颜色信息,或者是软件在导入过程中未正确处理颜色数据所致。 以下是一些可能的解决方法: 检查3D模型文件:首先,确保…

网络简略总结

目录 一、三次握手 四次挥手 1、三次握手:为了建立长链接进行交互即建立一个会话,使用http/https协议 2、四次挥手是一个断开连接释放服务器资源的过程 3、如果已经建立了连接,但是客户端突然出现故障了怎么办? 4、谁可以中断连接?客户端还是服务端还是都可以? 5、…

Linux环境开发工具之vim

前言 上一期我们已经介绍了软件包管理器yum, 已经可以在linux上查找、安装、卸载软件了,本期我们来介绍一下文本编辑器vim。 本期内容介绍 什么是vim vim的常见的模式以及切换 vim命令模式常见的操作 vim底行模式常见的操作 解决普通用户无法执行sudo问…

5G智能网关助力工业铸造设备监测升级

随着物联网技术的迅猛发展和工业4.0浪潮的推进,传统工业正面临着严峻的转型升级压力。在这一背景下,铸造行业——这一典型的传统重工业领域,也必须积极探索借助5G、物联网、边缘计算等技术提升生产经营效率的新路径。 本文就基于佰马合作伙伴…

【晴问算法】提高篇—动态规划专题—最大连续子序列和

题目描述 输入描述 输出描述 输出一个整数&#xff0c;表示最大连续子序列和。 样例1 输入 6 -2 11 -4 13 -5 -2 输出 20 解释 连续子序列和的最大值为&#xff1a; #include<bits/stdc.h> using namespace std; const int MAXN 100; int dp[MAXN];//dp[i]表示以a[i]元…

酷开科技聚焦大屏端数据研究,构建酷开系统深度挖掘大屏商业价值

中国所有的彩色大屏中&#xff0c;智能电视规模已经过半&#xff0c;OTT平台的数据价值越发引起人们关注。作为OTT行业的头部代表&#xff0c;酷开科技一直聚焦大屏端数据研究&#xff0c;目前已经形成一套基于大屏指数的智慧营销体系&#xff0c;让OTT大屏的数字营销化水平实现…

无人机/飞控--ArduPilot、PX4学习记录(2)

这是一篇碎碎念&#xff0c;零零碎碎的记录了环境配置过程&#xff0c;仅供本人记录学习历程和参考。(记录的挺乱的&#xff0c;但是文章链接里的博客写的是真好) 本章主要完成的目标&#xff1a; 安装PX4 并 成功运行出3D无人机界面。 参考文章&#xff1a; 搭建PX4环境&…

【LeetCode-114.二叉树展开为链表】

题目详情&#xff1a; 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序…

水果软件FL Studio 21 for mac 21.2.3.3586破解版的最新版本2024介绍安装

音乐是人类最美好的语言&#xff0c;它能够跨越国界、文化和语言&#xff0c;将人们紧密地联系在一起。在当今数字化时代&#xff0c;音乐创作已经不再是专业人士的专利&#xff0c;越来越多的音乐爱好者开始尝试自己动手制作音乐。而FL Studio21中文版编曲软件正是这样一个为你…

软件架构对于项目质量的影响

时间&#xff1a;2024年03月20日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 音频地址&#xff1a; 软件架构对于项目质量的影响在线收听-喜马拉雅 前言 大家好&#xff0c;欢迎来到小蒋聊技术&#xff0c;小蒋准备和大家一…

优先级队列(堆)(2)

目录 一. PriorityQueue的特性 二. PriorityQueue常用接口介绍 1. 优先级队列的构造 2. 转成大根堆存储方法: 3. 插入/删除/获取优先级最高的元素 三. Top-k问题 一. PriorityQueue的特性 Java 集合框架中提供了 PriorityQueue 和 PriorityBlockingQueue 两种类型的优先…

PowerShell 无法保留窗口和字体设置

那么&#xff0c;首先&#xff0c;得亮一下版本&#xff0c;默认软件&#xff1a; PS C:\Windows> $PSVersionTableName Value ---- ----- PSVersion 5.1.19041.4170 PSEdition …

Win11初始化系统遇一文解决

这个是目录 一、设置内的初始化无法使用时&#xff0c;使用以下工具二、将桌面移动到D盘三、解决win11桌面右键创建只有一个带盾牌的文件夹问题四、win11 系统停止更新五、office安装1、使用的是 Office Tool plus2、使用WPS 六、D盘有感叹号七、打开组策略编辑器(gpedit.msc)失…

安卓转鸿蒙能有多适配?简直了……

到现在为止&#xff0c;想必很多开发者都或多或少 了解过鸿蒙。许多企业也都已经加入了鸿蒙业务&#xff0c;半推半就的开始学习鸿蒙开发。那么鸿蒙到底好不好搞呢&#xff1f; 首先可以肯定的一点&#xff0c;对于做安卓的来说鸿蒙非常搞&#xff0c;究竟有多好搞呢&#xff…

SQL语句之SELECT语句

一般格式 SELECT DISTINCT/ALL 目标列表达式 //要显示的属性列 FROM 表名/视图名 //查询的对象 WHERE 条件表达式 //查询条件 GROUP BY 列名 HAVING 条件表达式 //查询结果分组 ORDER BY 列名 次序; //最终查询结果排序 文章目录 一、基本查询 1、SELECT 目标列表达…

系统设计实例(一)百万级别用户系统

二、百万级别用户系统 原则&#xff1a; 尽可能地缓存数据采用无状态Web层支持多个数据中心在 CDN 中托管静态资源通过分片扩展数据层将层级拆分为独立的服务 负载均衡器 负载均衡器会将传入的流量均匀分配给在负载均衡集合中定义的Web服务器&#xff0c;用户直接连接负载均…

数据结构与算法3-选择排序

文章目录 1. 认识选择排序2. 图示2.1 图示12.2 图示2 3. 代码 1. 认识选择排序 双层for循环&#xff0c;每次选出最小的数放到i位置&#xff0c;时间复杂度O( n 2 n^2 n2)&#xff0c;空间复杂度O(1);从未排序的序列中找到最小&#xff08;或最大&#xff09;的元素&#xff0…

Windows server Database 2025 安装 i225/i226 网卡驱动

windows这比坏得很&#xff0c;intel消费级网卡不准在服务器系统上安装。你要说他是异构不支持&#xff1f;他就纯粹恶心人。 之前已经安装过一次&#xff0c;但是今天database预览版一更新&#xff0c;又给我把网卡驱动杀了&#xff0c;气死&#xff0c;写一篇教程。 1.去官网…

cordova安装安卓版本,遇到的各种坑。折腾了两天才弄好

cordova官网地址 https://cordova.apache.org/docs/en/12.x/guide/cli/index.html 1. 输入命令 npm install -g cordova 全局安装cordova 2. 创建文件和项目以及app的应用名称 cordova create hello com.example.hello HelloWorld 我写的是这个 cordova create myApp 3.co…

基于Springboot的员工健康管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的员工健康管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…