【理解机器学习算法】之Clustering算法(Agglomerative Clustering)

news/2024/5/9 14:07:41/文章来源:https://blog.csdn.net/Hyman_Qiu/article/details/136924800

聚合聚类(Agglomerative Clustering)是一种层次聚类算法,通过逐步合并或“聚集”它们来构建嵌套聚类。这种方法采用自底向上的方式构建聚类层次:它从将每个数据点作为单个聚类开始,然后迭代合并最接近的聚类对,直到所有数据点合并为一个聚类,或直到达到指定的聚类数量。以下是更详细的概述:

聚合聚类的工作原理

  1. 初始化:开始时,将每个数据点视为一个单独的聚类。因此,如果你有N个数据点,你最初会有N个聚类。
  2. 相似性度量:选择一个度量标准来衡量聚类之间的距离(例如,对于空间中的点使用欧几里得距离,但根据数据的性质可以使用其他距离)。
  3. 连接准则:选择一个连接准则,这决定了作为观测对之间距离的函数的聚类集合之间的距离。常见的连接准则包括:
    1. 最短连接:两个聚类之间的距离定义为一个聚类中任何成员到另一个聚类中任何成员的最短距离。
    2. 最长连接:两个聚类之间的距离定义为一个聚类中任何成员到另一个聚类中任何成员的最长距离。
    3. 平均连接:两个聚类之间的距离定义为一个聚类中每个成员到另一个聚类中每个成员的平均距离。
    4. Ward方法:两个聚类之间的距离通过两个聚类合并后总体内聚类方差增加量来定义。
  4. 迭代合并:在每一步中,根据所选的距离和连接准则,找到最接近的聚类对并将它们合并为一个单独的聚类。更新存储聚类之间距离的距离矩阵。
  5. 终止:重复迭代合并,直到所有数据点合并为一个聚类或达到停止准则(例如,期望的聚类数量)。

优点和缺点

优点:
  - 聚合聚类在距离和连接准则的选择上具有多样性,使其适用于各种数据集。
  - 它产生了一个层次结构,这对于不同规模的聚类数据结构是有信息量的。

-缺点:
  - 对于大数据集来说,它可能计算成本高,因为它需要在每次迭代中计算和更新所有聚类对之间的距离。
  - 算法的结果可能对距离和连接准则的选择敏感。

应用
聚合聚类在广泛的应用领域中被使用,包括:
- 生物学:用于构建系统发育树。
- 文档和文本挖掘:用于对相似文档进行分组或在语料库中找到主题。
- 图像分析:用于分割图像中的相似区域。
- 客户细分:基于购买行为或偏好识别客户数据中的不同组。

聚合聚类是一种强大的工具,用于探索和理解复杂数据集内的结构,通过揭示数据的

要在Python中实现聚合聚类,您可以使用scikit-learn库的AgglomerativeClustering类。此示例演示了如何将聚合聚类应用于合成数据集:

from sklearn.datasets import make_blobs
from sklearn.cluster import AgglomerativeClustering
import matplotlib.pyplot as plt# 生成一个合成数据集
X, _ = make_blobs(n_samples=150, centers=4, cluster_std=1.0, random_state=42)# 实例化并拟合聚合聚类模型
# n_clusters指定要找到的聚类数量
# linkage='ward'表示算法将最小化被合并的聚类的方差
agg_clustering = AgglomerativeClustering(n_clusters=4, affinity='euclidean', linkage='ward')
cluster_assignment = agg_clustering.fit_predict(X)# 绘制聚类
plt.scatter(X[:, 0], X[:, 1], c=cluster_assignment, cmap='rainbow')
plt.title('聚合聚类')
plt.xlabel('特征1')
plt.ylabel('特征2')
plt.show()

它是如何工作的:

  • 使用make_blobs生成一组合成的数据点,这些数据点分布在几个“blob”中。这是我们要聚类的数据集。
  • 使用所需的聚类数量(n_clusters=4)和要使用的链接类型实例化AgglomerativeClustering。在这种情况下,使用的是linkage='ward',它最小化了被合并的聚类的方差。
  • 在数据集上调用fit_predict方法来执行聚类。此方法返回每个数据点的聚类标签。
  • 最后,用表示其聚类分配的颜色绘制数据点。这种可视化有助于理解数据点在算法创建的不同聚类之间的分布。

Dendograms树状图解释

树状图是显示对象之间层次关系的图表。它通常用于描绘由层次聚类产生的聚类排列。树状图通过在非单一聚类及其子聚类之间绘制U型链接来说明每个聚类是如何组成的。U型链接的高度指示了联合聚类之间的距离(或不相似性)。当您向上移动树状图时,聚类之间的不相似性变得更大。在聚合聚类的上下文中,树状图提供了聚类过程的视觉总结,显示了聚类合并的顺序以及每次合并发生的距离。

现在,让我们编写代码,对一个示例数据集执行聚合聚类,然后用树状图可视化层次聚类:

import numpy as np
import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import dendrogram, linkage
from sklearn.datasets import make_blobs# 生成一个样本数据集
X, labels_true = make_blobs(n_samples=50, centers=3, cluster_std=0.60, random_state=0)# 执行层次/聚合聚类
Z = linkage(X, 'ward')  # 'ward'连接方式最小化合并的聚类的方差# 绘制树状图
plt.figure(figsize=(10, 7))
plt.title("聚合聚类树状图")
plt.xlabel("样本索引")
plt.ylabel("距离")
dendrogram(Z, leaf_rotation=90., leaf_font_size=8.,)
plt.show()

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

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

相关文章

基于tcp协议的网络通信(将服务端守护进程化)

目录 守护进程化 引入 介绍 如何实现 思路 接口 -- setsid 注意点 实现代码 daemon.hpp log.hpp 运行情况 前情提要 -- 前后台任务介绍(区别命令),sessionsid介绍,session退出后的情况(nuhup,终端进程控制组),任务进程组概念,任务与进程组的关系,-bash介绍-CSDN博客…

基于SSM框架的酒店预订系统

基于SSM框架的酒店预订系统的设计与实现 摘要 当今世界的互联网信息技术飞速发展,网络化的工作模式已经几乎覆盖到各个工作领域中的业务内,人们的日常生活也渐渐离不开互联网。因此,在当下全国各处的酒店都开始构建起了自己的网络预订系统。…

vue的优缺点有那些 组件常用的有那些?

优点: 组件化开发,提升效率,方便复用,便于协同开发单页面路由易于结合其他的第三方库丰富的api方法轻量高效,虚拟DOMMVVM,数据驱动视图轻量级的框架 缺点: 缺少高阶教程和文档生态环境不如angular和re…

【PHP + 代码审计】数组基础

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收…

OpenHarmony系统服务的核心组件

简介 samgr组件是OpenHarmony的核心组件,提供OpenHarmony系统服务启动、注册、查询等功能。 系统架构 图 1 系统服务管理系统架构图 目录 /foundation/distributedschedule ├── samgr │ ├── bundle.json # 部件描述及编译文件 │ ├── frameworks…

Git的配置与简单的使用

Git概述 Git的工作流程 Git的配置与简单的使用 配置用户信息 配置用户名以及邮箱 邮箱尽量自己能够记住,以后会用到 git config --global user.name "Your name" git config --global user.email "Your email"查看用户信息 git config --…

警务数据仓库的实现

目录 一、SQL Server 2008 R2(一)SQL Server 的服务功能(二)SQL Server Management Studio(三)Microsoft Visual Studio 二、创建集成服务项目三、配置“旅馆_ETL”数据流任务四、配置“人员_ETL”数据流任…

ORA-29548

ORA-29548: Java system class reported: release of Java system classes in the database ( being determined) does not match that of the oracle executable (11.2.0.4.221018) 执行 java 报错 create or replace and compile java source named preg_replace aspackage…

深入解析MySQL的四种打开方式

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

嵌入式开发--STM32G431RBTx-定时器中断流水灯

嵌入式开发–STM32G431RBTx-定时器中断流水灯 定时器工作原理 如图有反映stm32g431的定时器资源。 共10个定时器 定时器定时器类型个数TIM6,7基本定时器2TIM2,3,4全功能通用定时器3TIM15,16,17通用定时器(只有1或2个…

51单片机中断信号的种类及应用场景

在嵌入式系统中,中断是一种重要的事件处理机制,它可以在程序执行的任何时候暂停当前任务,转而执行与之相关的特殊任务或事件。51单片机作为一种常见的微控制器,其中断功能在各种应用中起着关键作用。然而,对于初学者和…

权限提升-Win系统权限提升篇计算机管理用户进程注入令牌窃取服务启动远程控制

知识点 1、计算机管理用户到System-入口点和应用点 2、计算机管理用户到System-服务启动&远程控制 3、计算机管理用户到System-进程注入&令牌窃取 普通用户是没办法用(服务启动&远程控制、进程注入&令牌窃取等方法)提权到administrator、system权限的 而syst…

Git Commit 提交规范,变更日志、版本发布自动化和 Emoji 提交标准

前言 Git Commit 是开发的日常操作, 一个优秀的 Commit Message 不仅有助于他人 Review, 还可以有效的输出 CHANGELOG, 对项目的管理实际至关重要, 但是实际工作中却常常被大家忽略,希望通过本文,能够帮助大家规范 Git Commit,并且展示相关 …

Apache SeaTunnel和SeaTunnel Web 安装部署

Apache SeaTunnel和SeaTunnel Web 安装部署 前面我们介绍已经介绍过了Apache SeaTunnel,这里我们看一下SeaTunnel 的安装部署,早期的SeaTunnel 是没有web 页面的,只能在命令行里使用,现在SeaTunnel 已经有了web 端了,这就降低了我们的使用门槛 下载配置 我们可以去下面的…

【Word自动化办公】使用python-docx对Word进行操作

目录 一、环境安装 二、文档各组成结构获取 2.1 组成结构讲解 2.2 段落run对象的切分标准 三、获取整篇文档内容 四、写入指定样式的数据 4.1 通过add_paragraph与add_run参数添加样式 4.2 单独设置文本样式 五、添加标题 六、换行符&换页符 七、添加图片数据 …

Linux:rpm部署Jenkins(1)

1.获取Jenkins安装包 我这里使用的是centos7系统,ip为:192.168.6.6 2G运存 连接外网 Jenkins需要java环境,java的jdk包你可以去网上下载离线包,或者直接去yum安装,我这里使用的是yum安装 再去获取Jenkins的rpm包…

RabbitMQ的使用—实战

RabbitMQ的使用—实战 ​ RabbitMQ是一个开源的消息代理中间件,在分布式系统开发中被广泛应用。它实现了高级消息队列协议(AMQP),提供可靠的消息传递、灵活的路由、消息确认等功能。下面是使用RabbitMQ的基本流程: 安…

(附源码)基于Spring Boot和Vue的前后端分离考研资料分享平台的设计与实现

前言 💗博主介绍:✌专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2024年Java精品实战案例《100套》 🍅文末获取源码联系🍅 &#x1f31…

vue 消息左右滚动(前后无缝衔接)

之前一直用vue-seamless-scroll,无奈此组件有两个缺点不满足实际效果:1)标题过长被截取、2)标题果断也会滚动,无奈我自己封装一个,满足此两个弊端,也能达到vue-seamless-scroll组件的功能&#…

约数个数(数论,蓝桥杯)

题目描述&#xff1a; 给定一个数n&#xff0c;再给出n个数&#xff0c;现在要求你求出这些数的乘积的约数个数总和&#xff0c;结果对1e97取模。 取值范围&#xff1a;1<n<100; 1<ni<2e9; 分析步骤&#xff1a; 第一&#xff1a;要求约数的个数&#xff0c;我们有…