【漫话机器学习系列】003.Agglomerative聚类

news2025/3/1 9:15:56

Agglomerative 聚类(层次聚类中的自底向上方法) 

Agglomerative 聚类是一种层次聚类(Hierarchical Clustering)算法,采用自底向上的策略,将每个数据点看作一个单独的簇,然后逐步将相近的簇合并,直到满足停止条件。


1. 算法简介

基本思想
  • 每个样本初始为一个独立的簇。
  • 根据一定的相似性度量(如欧几里得距离、余弦相似度等),迭代地合并最相似的簇。
  • 最终形成一个簇或层次化的聚类结果(以树状图表示)。

2. 算法步骤

  1. 初始化
    • 每个数据点作为一个单独的簇。
  2. 计算距离矩阵
    • 计算所有簇之间的相似度(距离),存储在矩阵中。
  3. 合并最近的簇
    • 找到距离最近的两个簇,合并成一个新簇。
  4. 更新距离矩阵
    • 根据新的簇重新计算与其他簇的距离。
  5. 重复步骤 3 和 4
    • 直到所有点合并为一个簇,或满足停止条件。
停止条件
  • 指定的簇数量 k 达到。
  • 聚类距离超过设定阈值。

3. 距离计算方法

聚类中簇之间的距离可以通过以下方法定义:

(1) 单链接(Single Linkage)

d(C_i, C_j) = \min\{d(x_p, x_q) : x_p \in C_i, x_q \in C_j\}

  • 两簇中最近的点之间的距离。
  • 优点:适合长条形状的簇。
  • 缺点:对噪声和异常值敏感。
(2) 全链接(Complete Linkage)

d(C_i, C_j) = \max\{d(x_p, x_q) : x_p \in C_i, x_q \in C_j\}

  • 两簇中最远的点之间的距离。
  • 优点:生成紧密的簇。
  • 缺点:可能导致小簇。
(3) 平均链接(Average Linkage)

d(xp,xq)d(C_i, C_j) = \frac{1}{|C_i| \cdot |C_j|} \sum_{x_p \in C_i} \sum_{x_q \in C_j} d(x_p, x_q)

  • 簇中所有点对之间的平均距离。
  • 优点:平衡单链接和全链接的极端情况。
(4) 中心距离(Centroid Linkage)

d(C_i, C_j) = d(\mu_i, \mu_j)

  • 两簇质心(均值)之间的距离。
(5) Ward’s 方法

d(C_i, C_j) = \Delta SSE = SSE_{new} - (SSE_i + SSE_j)

  • 合并后簇内误差平方和的增量。
  • 优点:通常生成更加平衡的聚类结果。

4. 特点

优点
  1. 无需预设簇数 k:通过树状图可以分析多种聚类结果。
  2. 适用于任意形状簇:适合非凸形状的分布。
  3. 层次结构:提供数据的分层信息,有助于理解数据的内在结构。
缺点
  1. 计算复杂度高:距离矩阵的计算和更新代价较大,复杂度为 O(n^3)
  2. 对噪声敏感:异常值可能显著影响结果。
  3. 不适用于大规模数据集:计算量随样本数量呈平方增长。

5. Python 实现

使用 scikit-learn 的 Agglomerative Clustering
from sklearn.cluster import AgglomerativeClustering
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

# 生成数据
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.6, random_state=42)

# 进行层次聚类
clustering = AgglomerativeClustering(n_clusters=4, linkage='ward')
labels = clustering.fit_predict(X)

# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis', s=50)
plt.title('Agglomerative Clustering')
plt.show()

 生成树状图(Dendrogram)
from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs

X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.6, random_state=42)

# 生成层次聚类的链接矩阵
Z = linkage(X, method='ward')

# 绘制树状图
plt.figure(figsize=(10, 7))
dendrogram(Z)
plt.title('Dendrogram')
plt.xlabel('Sample Index')
plt.ylabel('Distance')
plt.show()


6. 应用场景

  1. 文本聚类
    • 将文档或短语按语义分层聚类。
  2. 基因聚类
    • 分析基因表达数据,寻找相似的基因组。
  3. 图像分割
    • 根据像素密度将图像划分为不同区域。
  4. 客户分群
    • 根据客户行为分层次聚类,细分市场。

7. 评价指标

轮廓系数 (Silhouette Coefficient)

衡量聚类效果,计算公式:

s = \frac{b - a}{\max(a, b)}

  • a:样本点与同簇点的平均距离。
  • b:样本点与最近簇中点的平均距离。
CH 指数 (Calinski-Harabasz Index)

衡量簇间距离与簇内距离的比值,值越大效果越好。

树状图分析

观察树状图,选择合适的截断高度以确定簇数。


8. Agglomerative 与其他聚类算法对比

特性Agglomerative ClusteringK-MeansDBSCAN
簇数量自动或手动指定需预设自动确定
簇形状任意形状适用于凸形状任意形状
计算复杂度较高较低较高
适用场景层次结构大规模数据噪声点多,簇密度明显

 Agglomerative 聚类提供了强大的层次化信息展示能力,非常适合探索和分析小规模数据的内在结构。但在处理大规模数据时,计算复杂度较高,需要结合降维或加速算法使用。

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

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

相关文章

docker的网络类型和使用方式

docker的网络类型 5种网络类型 bridge 默认类型,桥接到宿主机docker0的网络,有点类似于VM虚拟机的NAT网络模型。 案例: docker run --rm -itd --network bridge --name wzy666wzy-bridge alpine host host类型,共享宿主机的网络空间&#…

Java版-图论-最小生成树-Prim算法

实现描述 如图: Prim算法的基本思想是从一个顶点开始,逐步构建最小生成树。具体步骤如下: 随机选取一个顶点作为起始点,并将其加入最小生成树的集合中。从该顶点出发,选择一条边连接到其他未被访问的顶点中的最小权…

ZooKeeper节点扩容

新节点的准备工作(这里由hadoop05节点,IP地址为192.168.46.131充当) 配置新节点的主机域名映射,并将其通告给集群中的其他节点配置主机间免密登录关闭防火墙并将其加入到开机不启动项同步hadoop01节点的时间将所需要的文件分发给新…

HTML前端开发-- Iconfont 矢量图库使用简介

一、SVG 简介及基础语法 1. SVG 简介 SVG(Scalable Vector Graphics)是一种基于 XML 的矢量图形格式,用于在网页上显示二维图形。SVG 图形可以无限缩放而不会失真,非常适合用于图标、图表和复杂图形。SVG 文件是文本文件&#x…

厦门凯酷全科技有限公司抖音电商服务的卓越典范

在短视频和直播带货迅速崛起的时代,厦门凯酷全科技有限公司(以下简称“凯酷全科技”)以其专业的服务、创新的精神以及对市场的深刻理解,在抖音电商领域中脱颖而出,成为众多品牌商家信赖的选择。本文将深入探讨凯酷全科…

电脑运行时提示“0x80240037”错误,提示安装ie插件或其他微软程序时,报错提示“未指定的错误”是什么原因?以及要怎么解决和预防?

电脑运行时0x80240037错误解析:未指定的错误在安装IE插件或微软程序中的原因、解决与预防 作为一名经验丰富的软件开发从业者,我深知电脑在日常使用中可能遇到的各种问题,尤其是安装或更新软件时出现的错误。今天,我们将聚焦于一…

【C++】输入三个整数,输出最大值的高级分析

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯问题描述💯解题思路💯实现与分析方法一:三元运算符的直接应用详细分析:优缺点剖析: 方法二:显式条件…

类和对象一

目录 1.类的引入 2.类的定义 3.访问限定符 4.类的作用域 5.类对象模型 6.类的大小 1.类的引入 C语言结构体中只能定义变量,在C中,结构体不仅可以定义变量,也可以定义函数。 C兼容C语言,结构用法可以继续使用 同时sruct也升…

Python爬虫——HTML中Xpath定位

Xpath是一种路径查询语言。利用一个路径表达式从html文档中找到我们需要的数据位置,进而将其写入到本地或者数据库中。 学习Xpath爬虫,我们首先学习一下python中lxml库 关于库 lxml 终端下载Xpath需要用到的模块 pip install lxml 关于HTML 超文本标…

vulnhub靶场【hacksudo】之LPE的后续提权方法学习

前言 靶场:hacksudo-lpe的后几个challenge 基于上篇靶场hacksudo-ple的sudo提权 SUID文件提权 ar文件提权 使用find寻找具有SUID权限的文件 find / -perm -us -type f 2>/dev/null查看ar的SUID用法 sudo install -m xs $(which ar) .TF$(mktemp -u) LFILE&…

uniapp -- 实现页面滚动触底加载数据

效果 首选,是在pages.json配置开启下拉刷新 {"path": "pages/my/document/officialDocument","style": {"navigationStyle":</

【Windows11系统局域网共享文件数据】

【Windows11系统局域网共享文件数据】 1. 引言1. 规划网络2. 获取必要的硬件3. 设置网络4. 配置网络设备5. 测试网络连接6. 安全性和维护7. 扩展和优化 2. 准备工作2.1: 启用网络发现和文件共享2.2: 设置共享文件夹 3. 访问共享文件夹4. 小贴士5. 总结 1. 引言 随着家庭和小型办…

学习Ajax (概述,应用场景,使用jQury 实现ajax)

目录 前言 概述 什么是Ajax? 同步交互与异步交互的区别是什么呢&#xff1f; 应用场景 场景1 在搜索框搜索 资源 场景2 登录业务的对用户名处理 AJAX的优缺点 优点&#xff1a; 缺点&#xff1a; 使用jQury 实现ajax 使用步骤 1 引入jQury 文件 2 使用Ajax 函数…

【单片机开发】MCU三种启动方式(Boot选择)[主Flash/系统存储器(BootLoader)/嵌入式SRAM]

目录 参考资料&#xff1a; 利用 Boot 选择不同的启动方式&#xff1a; 单片机的存储结构(主 FLASH/系统存储器/嵌入式 SRAM)&#xff1a; 1. Cortex-M 内核芯片——启动原理&#xff1a; 1.1. 启动流程&#xff1a; 1.2. 根据单片机的存储器映射和架构图&#xff1a;启动…

C语言(指针基础2练习)

利用指针变量将一个数组中的数据反向输出。 #include <stdio.h>void rev(int *arr, int size) {int *end arr size - 1;for (int *ptr end; ptr > arr; ptr--){printf("%-3d", *ptr);}printf("\n"); } void get(int arr[], int len) {for (in…

微信小程序web-view 嵌套h5界面 实现文件预览效果

实现方法&#xff1a;(这里我是在小程序里面单独加了一个页面用来下载预览文件) 安装 使用方法请参考文档 npm 安装 npm install weixin-js-sdk import wx from weixin-js-sdk预览 h5界面代码 <u-button click"onclick" type"primary" :loading"…

C—初阶调试

对你有帮助的话能否一键三连啊&#xff01;祝每个人心想事成&#xff01; 什么是Bug? 首先我们先了解一下日常口语中的“Bug”是什么 Bug可以理解为计算机程序错误&#xff0c;编程时的漏洞 调试及重要性 顾名思义&#xff0c;调试就是通过工具找出bug存在&#xff0c;找出…

vs打开unity项目 新建文件后无法自动补全

问题 第一次双击c#文件自动打开vs编辑器的时候能自动补全&#xff0c;再一次在unity中新建c#文件后双击打开发现vs不能自动补全了。每次都要重新打开vs编辑器才能自动补全&#xff0c;导致效率很低&#xff0c;后面发现是没有安装扩展&#xff0c;注意扩展和工具的区别。 解决…

中间件--MongoDB部署及初始化js脚本(docker部署,docker-entrypoint-initdb.d,数据迁移,自动化部署)

一、概述 MongoDB是一种常见的Nosql数据库&#xff08;非关系型数据库&#xff09;&#xff0c;以文档&#xff08;Document&#xff09;的形式存储数据。是非关系型数据库中最像关系型数据库的一种。本篇主要介绍下部署和数据迁移。 在 MongoDB 官方镜像部署介绍中&#xff…

基于大模型的 AI Agent 技术框架全解析

一、AI Agent 与大语言模型&#xff1a;智能时代的双璧合辉 &#xff08;一&#xff09;AI Agent&#xff1a;智能化浪潮的引领者 在科技迅猛发展的当下&#xff0c;AI Agent 作为一种能够自主感知环境、决策并行动的智能系统&#xff0c;正引领着智能化的新潮流。与传统智能系…