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

注意:本文引用自专业人工智能社区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 npfrom scipy.cluster.hierarchy import dendrogram, linkage, cut_treeimport 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.mzph.cn/news/760042.shtml

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

相关文章

【阅读笔记】Adaptive GPS/INS integration for relative navigation

Lee J Y, Kim H S, Choi K H, et al. Adaptive GPS/INS integration for relative navigation[J]. Gps Solutions, 2016, 20: 63-75. 用于相对导航的自适应GPS/INS集成 名词翻译 formation flying:编队飞行 摘要翻译 在编队飞行、防撞、协同定位和事故监测等许多…

怎么轻松制作证件照?推荐这三款制作工具!

在日常生活中,我们经常需要制作各种证件照,如身份证、护照、驾驶证等。为了帮助大家快速、便捷地制作证件照,我将在本文中推荐三款优秀的证件照制作工具,包括国内外的软件,满足不同用户的需求。1.水印云 水印云是一款国…

自动装箱和拆箱

自动装箱(autoboxing)和拆箱(unboxing):将基本数据类型和包装类自动转换。 自动装箱: 基本类型的数据处于需要对象的环境中时,会自动转为“对象”。 以 Integer 为例: Integer i …

【MySQL】-锁的使用

1、锁的粒度分类 1、全局锁 一般用于数据库备份,整个库只读 FLUSH TABLES WITH READ LOCK 2、表级锁 细分为: 1)意向锁 Intention 事务A对表加行级锁,这行记录就只能读不能写。 事务B申请增加表级锁,如果他申请…

精讲:结构体

大家好: 衷心希望各位点赞。 您的问题请留在评论区,我会及时回答。 一、结构体 C语言中,结构体是用户根据实际问题而自行建立的一种数据类型,是由一系列相同或不同数据类型的数据构成的集合。在实际问题中,一个对象往…

node.js安装、npm镜像、vue cli脚手架安装

node.js、npm、vue/cli 文章目录 一、node.js安装二、包路径管理2.1 查看npm下载的默认路径2.2 更改路径2.3 配置环境变量2.4 安装cnmp(npm镜像) 三、安装脚手架创建Vue项目3.1 安装脚手架3.2 创建项目 一、node.js安装 官网上下载,然后直接一路下一步 …

k8s为什么删除了pod但是还是没删除掉的问题,deployment在影响

deployment 影响pod删除 一、问题所在二、解决问题 一、问题所在 执行:kubectl get pods --all-namespaces,获取dashboard相关的pod kubectl get pods --all-namespaces | grep dashboardkubectl delete pod dashboard-metrics-scraper-546d6779cb-4x6…

解密Oracle数据库引擎:揭开数据存储的神秘面纱(二)

本系列文章简介: 本系列文章旨在揭开Oracle数据库引擎的神秘面纱,帮助大家深入了解其内部机制和工作原理。我们将从基础概念入手,逐步深入到数据库引擎的核心组件和技术细节。我们将探讨Oracle数据库引擎的存储结构、索引机制、事务处理、并发…

【Linux Day16 I/O复用】

I/O复用 用途:I/O 复用能同时监听多个文件描述符。 I/O 复用虽然能同时监听多个文件描述符,但它本身是阻塞的。并且当多个文件描述符同时就绪时,如果不采取额外的措施,程序就只能按顺序依处理其中的每一个文件描述符,…

如何使用“ubuntu移动文件、复制文件到其他文件夹“?

一、移动文件到其他文件夹命令 mv node_exporter-1.5.0.linux-amd64.tar.gz /usr/local/etc/prometheus 二、复制文件到其他文件夹命令 cp node_exporter-1.5.0.linux-amd64.tar.gz /home/master

java每日一题——幸运囚犯(合集遍历,查询数据练习)

前言: 合集基本学完了,做做题巩固下知识点。打好基础,daydayup! 题目如下: 目前有100名囚犯,每个囚犯的编号是1-200之间的随机数。现在要求依次随机生成100名囚犯的编号(要求这些囚犯的编号是不能重复的&a…

CSS字体图标

文章目录 1. 概念2. 阿里图标 iconfont2.1. 网址2.2. 使用方法2.3. 注意事项2.3.1. 原因 3. font-awesome 图标3.1. 网址3.2. 使用方法 1. 概念 本质就是一个字体,可以灵活修改它的样式,降低服务器请求的次数,同时相比图片更加清晰。 2. 阿…

【Web APIs】DOM获取元素

目录 1.Web API基本认识 2.获取DOM元素 3.设置/修改DOM元素内容 4.设置/修改DOM元素属性 4.1修改元素常用属性 4.2修改元素样式属性 4.3设置/修改表单属性 5.定时器-间歇函数 1.Web API基本认识 作用:就是使用js去操作html和浏览器 分类:DOM&am…

windows访问远程服务器上容器的几种直接方式

远程服务器 host上有一个docker container,如何通过 client 直接登陆 container 呢? container 使用 host 的网络,即使用了 --networkhost先配置 container的 ssdh(/etc/ssh/sshd_config),相关参数设置 po…

【Frida】10_用鼠标自动标记棋盘上的雷区(一键过关)

🛫 系列文章导航 【Frida】 00_简单介绍和使用 https://blog.csdn.net/kinghzking/article/details/123225580【Frida】 01_食用指南 https://blog.csdn.net/kinghzking/article/details/126849567【Frida】 03_初识frida-node https://blog.csdn.net/kinghzking/ar…

AI程序员诞生:对程序员的影响与未来展望

🍎个人博客:个人主页 🏆个人专栏:日常聊聊 ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 方向一:AI程序员的优势分析 方向二:AI程序员局限性 方向三:对程序员职业的影响 方向四&…

【吊打面试官系列】Redis篇 - Redis 的回收策略(淘汰策略)?

大家好,我是锋哥。今天分享关于 Redis 的回收策略(淘汰策略)面试题,希望对大家有帮助; volatile-lru :从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰…

高通8255芯片首次烧写方法

高通8255芯片首次烧写需要进行分区烧写,方法如下: 目录 一:QFIL安装 二:关于QFIL详细文档 三:简要分区烧写方法 1烧写 meta build 2 然后重启一下机器 3 烧写 flat build 四:正常烧写程序 一&#…

成为高效Java工程师的干货笔记

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流,摸鱼划水的小伙伴,请点击【全栈技术交流群】 作为一名Java工程师&…

好用电脑桌面便签是什么?电脑好用便签软件推荐

面对电脑屏幕,我常常感到一种无形的压力。繁杂的工作、琐碎的事务,仿佛都在这个小小的屏幕里与我争夺注意力。每当这时,我就特别需要一个能随时记录我重要事项的工具,让我能在忙碌中保持清醒的头脑。 有一天,我发现了…