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

news2024/12/27 14:02:39

聚合聚类(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.coloradmin.cn/o/1535856.html

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

相关文章

ARMday6作业

1&#xff0c;串口字符串收发现象实现图 2.串口控制灯亮灭 main.c #include "uart4.h"//封装延时函数 void delay(int ms) {int i,j;for(i0;i<ms;i){for(j0;j<2000;j){}} }int strcmp(char *a1,char *a2) {int i0;while(a1[i]a2[i]){if(a1[i]\0){break;} i;}…

微软发布首款AI PC ,产业链有望迎来新一轮量价齐升

3月21日晚&#xff0c;微软举办主题为“办公新时代”的线上新品发布会&#xff0c;发布Surface Pro 10和Surface Laptop 6&#xff0c;新品将搭载基于英特尔酷睿Ultra或高通骁龙X Elite的处理器&#xff0c;配备新一代NPU&#xff0c;以增强AI性能。 这两款AI PC将支持“AI Exp…

爱普生EPSON全新传感技术方案亮相高交会,创造新时代“精智生活”

2023年中国国际高新技术成果交易会在深圳福田会展中心盛大举行&#xff0c;是目前中国规模最大、最具影响力的科技类展会之一。爱普生作为始终坚持“科技本地化”战略的技术创新前沿企业参与此次展会&#xff0c;为中国用户带来爱普生电子元器件三款创新技术与四大成熟传感器解…

人大金仓与中科红旗达成战略合作

近日&#xff0c;人大金仓与中科红旗&#xff08;北京&#xff09;信息科技有限公司签订战略合作协议。双方将发挥各自优势&#xff0c;充分整合资源&#xff0c;在党政、金融、运营商、能源、交通等领域深化合作&#xff0c;实现协同发展。 中科红旗&#xff08;北京&#xff…

Linux 在线yum安装: PostgreSQL 15.6数据库

Linux 在线yum安装&#xff1a; PostgreSQL 15.6数据库 1、PostgreSQL数据库简介2、在线安装PostgreSQL15.63、配置 PostgreSQL的环境变量4、使用默认用户登录PostgreSQL5、配置 PostgreSQL 允许远程登录6、修改 PostgreSQL 默认端口7、创建数据库和表、远程用户zyl8、pgAdmin远…

Day69:WEB攻防-Java安全JWT攻防Swagger自动化算法签名密匙Druid泄漏

目录 Java安全-Druid监控-未授权访问&信息泄漏 黑盒发现 白盒发现 攻击点 Java安全-Swagger接口-导入&联动批量测试 黑盒发现 白盒发现 自动化发包测试 自动化漏洞测试 Java安全-JWT令牌-空算法&未签名&密匙提取 识别 JWT 方式一&#xff1a;人工识…

#Linux(环境变量)

&#xff08;一&#xff09;发行版&#xff1a;Ubuntu16.04.7 &#xff08;二&#xff09;记录&#xff1a; &#xff08;1&#xff09;查看环境变量 &#xff08;2&#xff09;修改环境变量 第一种方法&#xff1a;直接使用命令设置&#xff08;立即生效&#xff0c;只会作用…

基于MATLAB的灰色神经网络预测订单需求

%% 清空环境变量 clc clear %% 36个样本&#xff0c;每个样本是6个月的销售量 load data%% 数据累加作为网络输入 [n,m]size(X); for i1:ny(i,1)sum(X(1:i,1));y(i,2)sum(X(1:i,2));y(i,3)sum(X(1:i,3));y(i,4)sum(X(1:i,4));y(i,5)sum(X(1:i,5));y(i,6)sum(X(1:i,6)); end%% …

儿童饰品上亚马逊需什么认证

注意了&#xff01;近期&#xff0c;亚马逊在抽查儿童首饰&#xff0c;被抽查到没有相关认证的产品将面临产品被下架等处罚&#xff01; 违反政策 如果您未在适用的截止日期之前提供所需信息&#xff0c;亚马逊可能会&#xff1a; 移除相关商品信息 暂停您添加新商品和/或商…

打造稳定高效的会员系统:技术架构解析与优化策略

随着互联网时代的发展和用户需求的变化&#xff0c;会员系统成为了各行各业企业实现用户粘性和增长的重要手段。一个稳定高效的会员系统架构能够帮助企业更好地管理会员数据、提供个性化服务和增加用户价值。本文将深入探讨会员系统的技术架构&#xff0c;分析其重要性和挑战&a…

(一)基于IDEA的JAVA基础1

Java是一门面向对象的编程语言&#xff0c;不仅吸收了C语言的各种优点&#xff0c;还摒弃了C里难以理解的多继承、指针等概念&#xff0c;因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表&#xff0c;极好地实现了面向对象理论&#xff0…

【效率提升】IDEA中书签功能的妙用

这里写目录标题 1.概述2.书签功能介绍2.1.书签创建和删除2.2.书签列表2.3.自定义书签名2.4.带标签的书签创建2.5.标签快速跳转&#xff08;1到9&#xff09;2.6.其他标签快捷键2.7.其他补充 3.写到最后 1.概述 在多年的代码开发工作中&#xff0c;有一些问题困扰我很长的时间&…

【使用redisson完成延迟队列的功能】使用redisson配合线程池完成异步执行功能,延迟队列和不需要延迟的队列

1. 使用redisson完成延迟队列的功能 引入依赖 spring-boot-starter-actuator是Spring Boot提供的一个用于监控和管理应用程序的模块 用于查看应用程序的健康状况、审计信息、指标和其他有用的信息。这些端点可以帮助你监控应用程序的运行状态、性能指标和健康状况。 已经有了…

电子科技大学链时代工作室招新题C语言部分---题号H

1. 题目 最有操作的一道题&#xff0c;有利于对贪心算法有个初步了解。 这道题的开篇向我们介绍了一个叫汉明距离的概念。 汉明距离指的就是两个相同长度的字符串的不同字符的个数。 例如&#xff0c;abc和acd&#xff0c;b与c不同&#xff0c;c与d不同&#xff0c;所以这两个…

【Linux C | 多线程编程】线程的创建、线程ID、线程属性

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-03-22 0…

LiDAR 点云数据综合指南

LiDAR 是光探测和测距的缩写,它彻底改变了各个领域的数据采集。它生成密集 3D 点云的能力为我们的世界提供了无与伦比的洞察力。 但如此丰富的信息也带来了复杂性,特别是在理解不同类型的激光雷达点云数据时。本指南旨在成为您的一站式资源,阐明其中的细微差别,并使您能够…

python基础——对序列的通用操作【+和*、in、切片操作、separator.join(iterable)】

&#x1f4dd;前言&#xff1a; 我们已经学习了python数据容器中的列表&#xff0c;元组以及字符串。而他们都属于序列 &#xff08;序列是指&#xff1a;内容连续&#xff0c;有序&#xff0c;可以用下标索引访问的数据容器&#xff09; 在之前已经介绍了不少操作方法&#xf…

工作需求,Vue实现登录

加油&#xff0c;新时代打工人&#xff01; vue 2.x Element UI <template><div class"body" :style"{background-image: url(${require(/assets/images/login.png)})}"><el-form :rules"rules" ref"loginForm" :mode…

线性表:关于链表(主要以单链表为例)的相关理解和应用

多清澈这天空 晴雨相拥 同心逐梦&#xff01; 坚守我信心 一路出众&#xff01;&#xff01; 首先&#xff0c;按照惯例&#xff0c;欢迎大家边听歌边观看本博客 ▶ 紫荆花盛开 (163.com)&#xff08;建议复制链接&#xff0c;浏览器打开&#xff0c;csdn打开太慢了&#x…

mysql数据类型和常用函数

目录 1.整型 1.1参数signed和unsigned 1.2参数zerofill 1.3参数auto_increment 2.数字类型 2.1floor()向下取整 2.2随机函数rand() 2.3重复函数repeat() 3.字符串类型 3.1length()查看字节长度&#xff0c;char_length()查看字符长度 3.2字符集 3.2.1查看默认字符…