【机器学习基础】机器学习入门核心算法:层次聚类算法(AGNES算法和 DIANA算法)
机器学习入门核心算法:层次聚类算法(AGNES算法和 DIANA算法)
- 一、算法逻辑
- 二、算法原理与数学推导
- 1. 距离度量
- 2. 簇间距离计算(连接标准)
- 3. 算法伪代码(凝聚式)
- 三、模型评估
- 1. 内部评估指标
- 2. 外部评估指标(已知真实标签)
- 3. 超参数选择
- 四、应用案例
- 1. 生物信息学
- 2. 文档主题分层
- 3. 图像分割
- 4. 社交网络分析
- 五、面试题及答案
- 常见问题
- 六、相关论文
- 七、优缺点对比
- 总结
一、算法逻辑
层次聚类(Hierarchical Clustering)通过构建树状结构(树状图/Dendrogram)揭示数据内在的层次关系,分为两类:
- 凝聚式(Agglomerative)
- 自底向上:每个样本初始为一个簇 → 迭代合并最近簇 → 最终形成单一簇
- 流程:
计算距离矩阵 → 合并最近簇 → 更新距离矩阵 → 重复至终止
- 分裂式(Divisive)
- 自顶向下:所有样本初始为一个簇 → 迭代分裂最异质簇 → 直至每个样本一簇
- 计算复杂度高,较少使用
核心特点:
- 无需预设聚类数
- 树状图可视化层次关系
- 合并/分裂过程不可逆
二、算法原理与数学推导
1. 距离度量
设样本 X = { x 1 , x 2 , . . . , x n } X = \{x_1, x_2, ..., x_n\} X={x1,x2,...,xn}, x i ∈ R d x_i \in \mathbb{R}^d xi∈Rd
常用距离:
- 欧氏距离: d ( x i , x j ) = ∑ k = 1 d ( x i k − x j k ) 2 d(x_i, x_j) = \sqrt{\sum_{k=1}^d (x_{ik} - x_{jk})^2} d(xi,xj)=k=1∑d(xik−xjk)2
- 曼哈顿距离: d ( x i , x j ) = ∑ k = 1 d ∣ x i k − x j k ∣ d(x_i, x_j) = \sum_{k=1}^d |x_{ik} - x_{jk}| d(xi,xj)=k=1∑d∣xik−xjk∣
2. 簇间距离计算(连接标准)
类型 | 公式 | 特点 |
---|---|---|
单连接 | d min ( C i , C j ) = min a ∈ C i , b ∈ C j d ( a , b ) d_{\text{min}}(C_i, C_j) = \min_{a \in C_i, b \in C_j} d(a,b) dmin(Ci,Cj)=a∈Ci,b∈Cjmind(a,b) | 易形成链式结构 |
全连接 | d max ( C i , C j ) = max a ∈ C i , b ∈ C j d ( a , b ) d_{\text{max}}(C_i, C_j) = \max_{a \in C_i, b \in C_j} d(a,b) dmax(Ci,Cj)=a∈Ci,b∈Cjmaxd(a,b) | 对噪声敏感 |
质心法 | d cent ( C i , C j ) = d ( μ i , μ j ) d_{\text{cent}}(C_i, C_j) = d(\mu_i, \mu_j) dcent(Ci,Cj)=d(μi,μj) | 可能导致逆反(Inversion) |
其中 μ i = 1 ∣ C i ∣ ∑ x ∈ C i x \mu_i = \frac{1}{|C_i|}\sum_{x \in C_i} x μi=∣Ci∣1∑x∈Cix 为簇质心, Δ SSE \Delta \text{SSE} ΔSSE 为合并后的簇内平方和增量。
3. 算法伪代码(凝聚式)
输入: 数据集 X, 连接标准
输出: 树状图
1. 初始化 n 个簇,每个簇包含一个样本
2. 计算所有簇对的距离矩阵 D
3. for k = n to 1:
4. 找到 D 中最小距离的簇对 (C_i, C_j)
5. 合并 C_i 和 C_j 为新簇 C_{new}
6. 更新距离矩阵 D(移除 C_i, C_j,添加 C_{new})
7. 记录合并高度(距离)
8. 生成树状图
三、模型评估
1. 内部评估指标
- 轮廓系数(Silhouette Coefficient):
s ( i ) = b ( i ) − a ( i ) max { a ( i ) , b ( i ) } s(i) = \frac{b(i) - a(i)}{\max\{a(i), b(i)\}} s(i)=max{a(i),b(i)}b(i)−a(i)
a ( i ) a(i) a(i):样本 i i i 到同簇其他点的平均距离, b ( i ) b(i) b(i):到最近其他簇的平均距离。 s ( i ) ∈ [ − 1 , 1 ] s(i) \in [-1,1] s(i)∈[−1,1],越大越好。 - 共表型相关(Cophenetic Correlation):
衡量树状图距离与原始距离的一致性(值接近1表示层次结构保留良好)
2. 外部评估指标(已知真实标签)
- 调整兰德指数(Adjusted Rand Index, ARI)
- Fowlkes-Mallows Index(FMI)
3. 超参数选择
- 切割高度选择:通过树状图的"最长无交叉垂直边"确定聚类数
- 连接标准选择:
- 单连接:适合非凸形状
- Ward法:适合凸簇且噪声少
四、应用案例
1. 生物信息学
- 基因表达聚类:对RNA-seq数据聚类,识别功能相似的基因模块
- 工具:GenePattern、Cluster 3.0
2. 文档主题分层
- 步骤:
- 文档→TF-IDF向量
- 余弦距离 + 平均连接
- 切割树状图得到主题层级(如:科技→AI→CV/NLP)
3. 图像分割
- 流程:
像素→颜色+坐标特征 → Ward法聚类 → 合并相似区域 - 优势:保留空间连续性
4. 社交网络分析
- 用户行为数据聚类 → 发现社区层级结构(如:核心用户群→子兴趣组)
五、面试题及答案
常见问题
-
Q: 层次聚类与K-means的本质区别?
A:- 层次聚类生成树状结构,K-means生成平面划分
- 层次聚类无需预设K,K-means需指定聚类数
- 层次聚类复杂度 O ( n 3 ) O(n^3) O(n3),K-means为 O ( n k ) O(nk) O(nk)
-
Q: Ward法的目标函数是什么?
A: 最小化合并后的簇内平方和增量:
Δ SSE = ∣ C i ∣ ∣ C j ∣ ∣ C i ∣ + ∣ C j ∣ ∥ μ i − μ j ∥ 2 \Delta \text{SSE} = \frac{|C_i||C_j|}{|C_i|+|C_j|} \|\mu_i - \mu_j\|^2 ΔSSE=∣Ci∣+∣Cj∣∣Ci∣∣Cj∣∥μi−μj∥2 -
Q: 何时选择全连接而非单连接?
A: 当需要紧凑球形簇且数据噪声较少时;单连接易受噪声影响形成链式结构。 -
Q: 如何处理大规模数据?
A:- 使用优先队列优化到 O ( n 2 log n ) O(n^2 \log n) O(n2logn)
- 采样或Mini-Batch
- 切换为BIRCH(平衡迭代规约聚类)算法
六、相关论文
-
奠基性论文:
- Ward, J. H. (1963). Hierarchical Grouping to Optimize an Objective Function
贡献:提出Ward最小方差法 - Johnson, S. C. (1967). Hierarchical Clustering Schemes
贡献:系统化连接标准
- Ward, J. H. (1963). Hierarchical Grouping to Optimize an Objective Function
-
高效优化:
- Murtagh, F. (1983). A Survey of Recent Advances in Hierarchical Clustering Algorithms
贡献:提出 O ( n 2 ) O(n^2) O(n2) 单连接算法
- Murtagh, F. (1983). A Survey of Recent Advances in Hierarchical Clustering Algorithms
-
生物学应用:
- Eisen, M. B., et al. (1998). Cluster Analysis of Gene Expression Data
工具:开发TreeView软件
- Eisen, M. B., et al. (1998). Cluster Analysis of Gene Expression Data
七、优缺点对比
优点 | 缺点 |
---|---|
1. 可视化强(树状图展示层次) | 1. 计算复杂度高(凝聚式 O ( n 3 ) O(n^3) O(n3)) |
2. 无需预设聚类数 | 2. 合并/分裂后不可逆 |
3. 灵活选择距离/连接标准 | 3. 对噪声和离群点敏感(尤其全连接) |
4. 适合层次结构数据(如生物分类学) | 4. 大样本内存消耗大 |
总结
- 核心价值:揭示数据内在层次关系(如生物进化树、文档主题树)
- 工业选择:中小规模数据用层次聚类(<10k样本),大规模用BIRCH或HDBSCAN
- 关键决策:距离度量 + 连接标准(Ward法最常用)
- 趋势:与深度学习结合(如深度层次聚类)
相关文章:

【机器学习基础】机器学习入门核心算法:层次聚类算法(AGNES算法和 DIANA算法)
机器学习入门核心算法:层次聚类算法(AGNES算法和 DIANA算法) 一、算法逻辑二、算法原理与数学推导1. 距离度量2. 簇间距离计算(连接标准)3. 算法伪代码(凝聚式) 三、模型评估1. 内部评估指标2. …...

Google Play的最新安全变更可能会让一些高级用户无法使用App
喜欢Root或刷机的Android用户要注意了,Google最近全面启用了新版Play Integrity API,可能会导致部分用户面临无法使用某些App的窘境。Play Integrity API是Google提供给开发者的工具,用于验证App是否在“未修改”的设备上运行。 许多重要应用…...
深度学习篇---人脸识别中的face-recognition库和深度学习
深度学习方法和使用 Python 的face_recognition库进行人脸识别在技术原理、实现方式和应用场景上有显著区别,以下从多个维度对比分析: 一、技术原理 1. 深度学习方法 核心逻辑:基于神经网络(如卷积神经网络 CNN)构建…...
(11)java+ selenium->元素定位之By_tag_name
1.简介 继续WebDriver关于元素定位,这篇介绍By ClassName。tagName是DOM结构的一部分,其中页面上的每个元素都是通过输入标签,按钮标签或锚定标签等标签定义的。每个标签都具有多个属性,例如ID,名称,值类等。就其他定位符而言在Selenium中,我们使用了标签的这些属性值来…...

React---day5
4、React的组件化 组件的分类: 根据组件的定义方式,可以分为:函数组件(Functional Component )和类组件(Class Component);根据组件内部是否有状态需要维护,可以分成:无状态组件(Stateless Component )和…...

Java开发之定时器学习
面试 一、线程池实现定时器 核心代码: public static void main(String[] args) {ScheduledExecutorService scheduledExecutorService Executors.newScheduledThreadPool(5);Runnable runnable () -> System.out.println("当前线程"Thread.current…...

HealthBench医疗AI评估基准:技术路径与核心价值深度分析(上)
引言:医疗AI评估的新范式 在人工智能技术迅猛发展的当下,医疗AI系统已逐渐从实验室走向临床应用。然而,医疗领域的特殊性要求这些系统不仅需要在技术指标上表现出色,更需要在实际临床场景中展现出可靠、安全且有效的性能。长期以来,医疗AI评估领域面临着三个核心挑战:评…...

Windows+VSCode搭建小智(xiaozhi)开发环境
作为一名DIY达人,肯定不会错过最近很火的“小智AI聊天机器人”,网上教程非常丰富,初级玩家可以直接在乐鑫官方下载ESP-IDF安装包并经过简单的菜单式配置后,即可进行代码编译和烧录(详见:Docs)。…...

VueScan Pro v9.8.45.08 一款图像扫描软件,中文绿色便携版
VueScan是著名的第三方底片扫描仪驱动程序,支持市场可见绝大多数型号的底片扫描仪,可以更为灵活地控制扫描过程,更深入地发掘硬件潜力,获取色彩 完美的高质量扫描结果。VueScan支持200种以上的底片类型,在剪取图像时制…...

FreeRTOS通俗理解指南:基础概念 + 架构+ 内核组件+练手实验
RTOS 基础概念 想象一下,你是一个忙碌的厨师,在厨房里同时要完成煎牛排和煮意大利面两项任务。 1.传统单线程模式(没有RTOS) 如果你只能按顺序一项一项地做,就会是这样的过程: 先煎一会儿牛排然后去看看…...
Python后端开发实战:从0到1搭建高可用API服务
引言 Python凭借其简洁的语法和丰富的生态(如Django、Flask、FastAPI等框架),已成为后端开发的主流语言之一。本文将结合一个真实电商API项目,分享从架构设计到部署上线的完整流程,并总结开发过程中常见的坑与最佳实践。 一、实战案例:电商API开发流程 1.1 技术选型 框…...

房屋租赁系统 Java+Vue.js+SpringBoot,包括房屋信息、看房申请、租赁合同、房屋报修、收租信息、维修数据、租客管理、公告管理模块
房屋租赁系统 JavaVue.jsSpringBoot,包括房屋信息、看房申请、租赁合同、房屋报修、收租信息、维修数据、租客管理、公告管理模块 百度云盘链接:https://pan.baidu.com/s/16YRGBPsfbd4_HxXhO0jM5Q 密码:smk4 摘 要 房屋是人类生活栖息的重要…...
4、ubuntu系统 | 文本和目录操作函数
1、目录操作函数 ls(列出目录内容) 用途:列出指定目录中的文件和子目录。语法:ls [选项] [路径]常用选项: -l:以长格式显示文件详细信息(权限、所有者、大小、时间等)。-aÿ…...
docker部署ELK,ES开启安全认证
ES启动命令 docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 elasticsearch:8.17.0 es启动之后需要进入es容器,重置密码 elasticsearch-reset-password -u elastic -i 重置后的密码配置到kibana.yml中,启动kibana docker run …...

ASP.NET MVC添加视图示例
ASP.NET MVC高效构建Web应用- 商品搜索 - 京东 视图(V)是一个动态生成HTML页面的模板,它负责通过用户界面展示内容。本节将修改HelloWorldController类,并使用视图模板文件,以干净地封装生成对客户端的HTML响应的过程…...
自动驾驶中的路径跟踪:Python实现与技术解析
自动驾驶中的路径跟踪:Python实现与技术解析 一、路径跟踪是什么?为什么它至关重要? 路径跟踪(Path Tracking)是自动驾驶系统的关键部分之一,它负责确保车辆能够沿着预定义的轨迹行驶,同时稳定控制转向角度和速度。一个好的路径跟踪算法需要具备以下特点: 精准度:能…...
前端面试题目-高频问题集合
1.CSS里面水平垂直居中的方法 1.CSS里面水平垂直居中的方法弹性布局display: flex; /*先开启flex布局*/justify-content: center; /*实现水平居中*/jalign-items: center; /*实现垂直居中*/网格布局display: grid; /*先开启grid布局*/plac…...
MyBatis源码解析:从 Mapper 接口到 SQL 执行的完整链路
MyBatis源码解析:从 Mapper 接口到 SQL 执行的完整链路 一、Mapper 代理对象的创建:sqlSession.getMapper(UserMapper.class)二、接口方法的执行:mapper.selectUser("coderzpw", 18)2.1 四大核心组件解析2.1.1 Executor(…...

50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Form Wave(表单label波动效果)
📅 我们继续 50 个小项目挑战!—— FormWave组件 仓库地址:https://github.com/SunACong/50-vue-projects 项目预览地址:https://50-vue-projects.vercel.app/ 🎯 组件目标 构建一个美观、动态的登录表单࿰…...

双目相机深度的误差分析(基线长度和相机焦距的选择)
全文基于针孔模型和基线水平放置来讨论 影响双目计算深度的因素: 1、基线长度:两台相机光心之间距离2、相机焦距(像素): f x f_x fx(或 f y f_y fy)为焦距 f f f和一个缩放比例的乘积。在…...

Pytorch Geometric官方例程pytorch_geometric/examples/link_pred.py环境安装教程及图数据集制作
最近需要训练图卷积神经网络(Graph Convolution Neural Network, GCNN),在配置GCNN环境上总结了一些经验。 我觉得对于初学者而言,图神经网络的训练会有2个难点: ①环境配置 ②数据集制作 一、环境配置 我最初光想…...

React---day6、7
6、组件之间进行数据传递 **6.1 父传子:**props传递属性 父组件: <div><ChildCpn name"蒋乙菥" age"18" height"1,88" /> </div>子组件: export class ChildCpn extends React.Component…...

hook组件-useEffect、useRef
hook组件-useEffect、useRef useEffect 用法及执行机制 WillMount -> render -> DidMount ShouldUpdate -> WillUpdate -> render -> DidUpdate WillUnmount(只有这个安全) WillReceiveProps useEffect(callback) 默认所有依赖都更新useEffect(callback, [])&am…...
功能结构整理
C# Sxer Sxer.Base:基础子功能 Sxer.Base.Debug:打印 Sxer.Utility:工具类 Sxer.CustomFunction:独立功能点开发 Unity...
企业级开发中的 maven-mvnd 应用实践
1. 引言:Maven 在企业级开发中的挑战 1.1 Maven 构建的常见痛点 在大型 Java 项目中,Maven 是主流的构建工具,但随着项目的复杂度增加,其性能瓶颈逐渐显现: 构建速度慢:每次执行 mvn clean install 都需要重新加载插件和依赖。重复构建浪费资源:即使未修改源码,仍会触…...
yolov12毕设前置知识准备 1
1 什么是目标检测呢? 目标检测(Object Detection)主要用于识别图像或视频中特定类型物体的位置,并标注其类别。 简单来说,就是让计算机像人类一样 “看懂” 图像内容,不仅能识别出物体(如人、…...

随机游动算法解决kSAT问题
input:n个变量的k-CNF公式 ouput:该公式的一组满足赋值或宣布没有满足赋值 算法步骤: 随机均匀地初始化赋值 a ∈ { 0 , 1 } n a\in\{0,1\}^n a∈{0,1}n.重复t次(后面会估计这个t): a. 如果在当前赋值下…...

《Discuz! X3.5开发从入门到生态共建》第1章 Discuz! 的前世今生-优雅草卓伊凡
《Discuz! X3.5开发从入门到生态共建》第1章 Discuz! 的前世今生-优雅草卓伊凡 第一节 从康盛创想到腾讯收购:PC时代的辉煌 1.1 Discuz! 的诞生:康盛创想的开源梦想 2001年,中国互联网正处于萌芽阶段,个人网站和论坛开始兴起。…...
azure web app创建分步指南系列之一
什么是 Azure Web 应用? Azure Web 应用是 Azure 应用服务的一部分,是一个完全托管的平台,用于开发、部署和扩展 Web 应用程序。它支持各种编程语言和框架,例如 .NET、Java、Python、PHP 和 Node.js,使开发人员能够构建强大的 Web 应用程序,而无需担心底层基础架构。借助…...
PyTorch实战——基于生成对抗网络生成服饰图像
PyTorch实战——基于生成对抗网络生成服饰图像 0. 前言1. 模型分析与数据准备2. 判别器3. 生成器4. 模型训练5. 模型保存与加载相关链接0. 前言 我们已经学习了生成对抗网络 (Generative Adversarial Network, GAN) 的工作原理,接下来,将学习如何将其应用于生成其他形式的内…...