系统聚类比较——最短距离法、最长距离法、重心法和类平均法

news2024/10/27 20:39:37

系统聚类概述

系统聚类,又称分层聚类法,是一种用于分析数据的统计方法,在生物学、分类学、社会网络等领域有广泛应用。以下是对系统聚类的详细概述:

一、基本思想

系统聚类的基本思想是将每个样品(或数据点)视为单独的类,然后基于它们之间的相似性(或距离)进行逐步合并或分裂,以构建一个层次结构的聚类结果。这种层次结构可用于分析数据的不同层次的相似性关系。

二、聚类方式

系统聚类主要包括两种基本的聚类方式:

  1. 凝聚聚类:从单个样本开始,不断将最相似的两个样本合并,形成一个新的聚类。这个过程一直持续到所有样本都被合并到一个聚类中为止。凝聚聚类的优点是在处理大数据时,计算复杂度相对较低;但其缺点是可能会导致聚类数量不准确,对噪声和异常值的敏感度较高。
  2. 分裂聚类:从所有样本开始,不断将最不相似的两个样本分开,形成一个新的聚类。这个过程一直持续到所有样本都被分到不同的聚类中为止。分裂聚类的优点是聚类数量比较准确,对噪声和异常值的影响较小;但其缺点是在处理大数据时,计算复杂度较高。

三、距离与相似度度量

在系统聚类中,类与类之间的距离有多种定义方法,常见的包括:

  1. 最短距离法:类与类之间的距离等于两类最近样品之间的距离。
  2. 最长距离法:类与类之间的距离等于两类最远样品之间的距离。
  3. 类平均法:类与类之间的距离等于各类元素两两之间的平方距离的平均。
  4. 重心法:类与类之间的距离定义为对应这两类重心之间的距离。对样品分类来说,每一类的类重心就是该类样品的均值。
  5. 中间距离法:介于最短距离法和最长距离法之间的一种方法,既不考虑最近距离,也不考虑最远距离,而是采用介于最远和最近之间的距离。
  6. 离差平方和法(Ward法):基于方差分析的思想,如果分类正确,同类样品之间的离差平方和应当较小,类与类之间的离差平方和应当较大。

此外,常用的空间距离度量还包括绝对值距离、欧氏距离、切比雪夫距离、马氏距离和兰氏距离等。

四、聚类过程与结果

系统聚类的过程通常包括以下几个步骤:

  1. 定义以变量或指标的个数为维度的空间里的一种距离。
  2. 计算所有样本两两之间的距离。
  3. 将每个样本归为一类,根据计算出的样本间的距离合并距离最近的两类为一个新类。
  4. 再计算新类与其他各类的距离,并根据计算出的距离合并距离最近的两类为一个新类。
  5. 循环以上过程直至类别个数为1或达到其他停止条件。

最终,系统聚类会生成一个层次结构的聚类结果,可以通过聚类图(或称为树状图、谱系图)直观地展示。研究者可以根据聚类图决定将数据分为多少类,并深入分析数据的结构和组织。

五、应用与优势

系统聚类在多个领域都有广泛应用,如生物学中的物种分类、市场细分中的客户群划分、文本挖掘中的主题识别等。其优势在于能够构建层次结构的聚类结果,为研究者提供了对数据结构和组织的更深层次的认识。同时,通过选择不同的相似度或距离度量方式以及聚类算法,可以得到不同的聚类结果,以满足不同领域和问题的需求。

综上所述,系统聚类是一种灵活且强大的聚类分析方法,适用于多个领域的数据分析和挖掘任务。

系统聚类方法比较

本文使用Python对不同系统聚类的结果进行比较分析。

数据读取 

#不同系统聚类法的比较
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import AgglomerativeClustering
from scipy.cluster.hierarchy import dendrogram, linkage, ward
#创建数据
index=['A','B','C','D','E']
X1=[6901.6,8467.3,5067.7,5777.3,5975.7]
X2=[2321.3,1903.9,1746.6,1776.9,1963.5]
X3=[4632.8,7385.4,3753.4,3752.6,3809.4]
X4=[1558.2,1420.7,1430.2,1329.1,1322.1]
X5=[3447.0,5100.9,1993.8,2517.9,3064.3]
X6=[3018.5,3452.3,2078.8,2322.1,2352.9]
X7=[2313.6,1691.9,1524.5,1583.4,1750.4]
X8=[802.8,645.3,492.8,479.9,614.9]
X=np.array([X1,X2,X3,X4,X5,X6,X7,X8]).T

Python绘制谱系图 

#%%
#最短距离法
model=AgglomerativeClustering(n_clusters=3,linkage='single')
#linkage='single'表示最短距离法
model.fit(X)
# #输出欧式距离
# print(model.children_)
# #输出聚类结果
# print(model.labels_)
#绘制聚类结果
plt.figure(figsize=(10,5))
plt.subplot(421)
plt.title('Single linkage')
plt.scatter(X[:,0],X[:,1],c=model.labels_,cmap='rainbow')
for i in range(X.shape[0]):
    plt.text(X[i,0],X[i,1],index[i])

#绘制谱系图
linkage_matrix=linkage(X,method='single',metric='euclidean')
plt.subplot(422)
#转换横坐标与纵坐标
dendrogram(linkage_matrix,labels=index,orientation='right')
plt.show()

#最长距离法
model=AgglomerativeClustering(n_clusters=3,linkage='complete')
#linkage='complete'表示最长距离法
model.fit(X)
# #输出欧式距离
# print(model.children_)
# #输出聚类结果
# print(model.labels_)
#绘制聚类结果
plt.figure(figsize=(10,5))
plt.subplot(423)
plt.title('Complete linkage')
plt.scatter(X[:,0],X[:,1],c=model.labels_,cmap='rainbow')
for i in range(X.shape[0]):
    plt.text(X[i,0],X[i,1],index[i])
    
#绘制谱系图
linkage_matrix=linkage(X,method='complete',metric='euclidean')
plt.subplot(424)
#转换横坐标与纵坐标
dendrogram(linkage_matrix,labels=index,orientation='right')
plt.show()

#重心法
model=AgglomerativeClustering(n_clusters=3,linkage='average')
#linkage='average'表示重心法
model.fit(X)
#输出欧式距离
# print(model.children_)
#输出聚类结果
# print(model.labels_)
#绘制聚类结果
plt.figure(figsize=(10,5))
plt.subplot(425)
plt.title('Average linkage')
plt.scatter(X[:,0],X[:,1],c=model.labels_,cmap='rainbow')
for i in range(X.shape[0]):
    plt.text(X[i,0],X[i,1],index[i])
        
#绘制谱系图
linkage_matrix=linkage(X,method='average',metric='euclidean')
plt.subplot(426)
#转换横坐标与纵坐标
dendrogram(linkage_matrix,labels=index,orientation='right')
plt.show()

#类平均法
model=AgglomerativeClustering(n_clusters=3,linkage='ward')
#linkage='ward'表示类平均法
model.fit(X)
#输出欧式距离
# print(model.children_)
#输出聚类结果
# print(model.labels_)
#绘制聚类结果
plt.figure(figsize=(10,5))
plt.subplot(427)
plt.title('Ward linkage')
plt.scatter(X[:,0],X[:,1],c=model.labels_,cmap='rainbow')
for i in range(X.shape[0]):
    plt.text(X[i,0],X[i,1],index[i])
        
#绘制谱系图欧氏距离衡量
linkage_matrix=linkage(X,method='ward',metric='euclidean')
plt.subplot(428)
#转换横坐标与纵坐标
dendrogram(linkage_matrix,labels=index,orientation='right')
plt.show()

 一、最短距离法

二、最长距离法

 三、重心法

四、类平均法

Python绘制聚类图 

#最短距离法
model=AgglomerativeClustering(n_clusters=3,linkage='single')#linkage='single'表示最短距离法
model.fit(X)

plt.figure(figsize=(10,5))
plt.subplot(221)
plt.title('Single linkage')
plt.scatter(X[:,0],X[:,1],c=model.labels_,cmap='rainbow')
for i in range(X.shape[0]):
    plt.text(X[i,0],X[i,1],index[i])
    
#最长距离法
model=AgglomerativeClustering(n_clusters=3,linkage='complete')#linkage='complete'表示最长距离法
model.fit(X)

plt.subplot(222)
plt.title('Complete linkage')
plt.scatter(X[:,0],X[:,1],c=model.labels_,cmap='rainbow')
for i in range(X.shape[0]):
    plt.text(X[i,0],X[i,1],index[i])
plt.show()
#重心法
model=AgglomerativeClustering(n_clusters=3,linkage='average')#linkage='average'表示重心法
model.fit(X)

plt.figure(figsize=(10,5))
plt.subplot(223)
plt.title('Average linkage')
plt.scatter(X[:,0],X[:,1],c=model.labels_,cmap='rainbow')
for i in range(X.shape[0]):
    plt.text(X[i,0],X[i,1],index[i])
        
#类平均法
model=AgglomerativeClustering(n_clusters=3,linkage='ward')#linkage='ward'表示类平均法
model.fit(X)

plt.subplot(224)
plt.title('Ward linkage')
plt.scatter(X[:,0],X[:,1],c=model.labels_,cmap='rainbow')
for i in range(X.shape[0]):
    plt.text(X[i,0],X[i,1],index[i])
plt.show()

一、最短距离法(左)和最长距离法(右)

二、重心法(左)和类平均法(右)

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

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

相关文章

深入理解C++模板编程:从基础到进阶

引言 在C编程中,模板是实现泛型编程的关键工具。模板使得代码能够适用于不同的数据类型,极大地提升了代码复用性、灵活性和可维护性。本文将深入探讨模板编程的基础知识,包括函数模板和类模板的定义、使用、以及它们的实例化和匹配规则。 一…

《分布式机器学习模式》:解锁分布式ML的实战宝典

在大数据和人工智能时代,机器学习已经成为推动技术进步的重要引擎。然而,随着数据量的爆炸性增长和模型复杂度的提升,单机环境下的机器学习已经难以满足实际需求。因此,将机器学习应用迁移到分布式系统上,成为了一个不…

世界酒中国菜与另可数字平台达成战略合作

世界酒中国菜与另可数字平台达成战略合作,共推行业发展新高度 近日,在行业内引起广泛关注的“世界酒中国菜”项目,与“另可”数字平台成功举行了战略合作签约仪式。这一重要合作不仅是双方发展历程中的重要里程碑,更是继世界酒中…

如何通过视频建立3d模型

通过视频建立3D模型通常包括几个关键步骤:从视频中提取帧、对帧中的物体进行特征提取、将多帧中的信息结合起来恢复三维结构。Python中有一些库和工具可以帮助实现这个过程,例如OpenCV、Open3D、COLMAP等。以下是一个简化的流程和代码框架: 步…

量子计算突破:下一个科技革命的风口浪尖在哪里?

内容概要 在当今科技飞速发展的时代,量子计算如同一颗璀璨的明珠,正闪烁着无尽的可能性。它不仅是解决科学难题的钥匙,更是即将引领科技革命的先锋。如今,随着技术的不断突破,量子计算已经步入了一个崭新的阶段。想象…

使用React构建现代Web应用

💖 博客主页:瑕疵的CSDN主页 💻 Gitee主页:瑕疵的gitee主页 🚀 文章专栏:《热点资讯》 使用React构建现代Web应用 1 引言 2 React简介 3 安装React 4 创建React项目 5 设计应用结构 6 创建组件 7 使用组件…

Docker本地安装Minio对象存储

Docker本地安装Minio对象存储 1. 什么是 MinIO? MinIO 是一个开源的对象存储服务器。这意味着它允许你在互联网上存储大量数据,比如文件、图片、视频等,而不需要依赖传统的文件系统。MinIO 的特点在于它非常灵活、易于使用,同时…

【ruoyi-vue】ruoyi-vue 去掉数据库和redis

场景:采用ruoyi-vue作为一个简单的后台框架,不需要使用数据库,redis。因此采取以下方法去掉相关配置,防止启动时造成数据和redis不存在的报错。 1、去掉数据库 注释掉framework下的DruidConfig.java 2、去掉部分数据启动时的初…

将公有云变成本地磁盘的几种方式

因为微信更改了推送机制,不按照号主发文时间排序了。现在的规则是综合多种因素,你可能在今天收到昨天的推送,甚至前天的! 如果你认可菜鸟小白的学习分享的话,就星标一下吧,只需要两步! 这样你可…

猫头虎 分享:Python库 Click 的简介、安装、用法详解入门教程

🐯 猫头虎 分享:Python库 Click 的简介、安装、用法详解入门教程 今天猫头虎带您一起探索 Click 库!最近有位粉丝私信猫哥,问到在项目中如何用 Python 简单又高效地实现命令行工具。大家熟悉的 argparse 虽然功能齐全&#xff0c…

深入理解gPTP时间同步过程

泛化精确时间协议(gPTP)是一个用于实现精确时间同步的协议,特别适用于分布式系统中需要高度协调的操作,比如汽车电子、工业自动化等。 gPTP通过同步主节点(Time Master)和从节点(Time Slave)的时钟,实现全局一致的时间参考。 以下是gPTP实现主从时间同步的详细过程:…

WaveNet模型实现电力预测

项目源码获取方式见文章末尾! 回复暗号:13,免费获取600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【EfficientNet-B6模型实现ISIC皮肤镜图像数据集分类】 2.【卫星图像道路检测De…

GeoWebCache1.26调用ArcGIS切片

常用网址: GeoServer GeoWebCache (osgeo.org) GeoServer 用户手册 — GeoServer 2.20.x 用户手册 一、版本需要适配:Geoserver与GeoWebCache、jdk等的版本适配对照 ​ 查看来源 二、准备工作 1、数据:Arcgis标准的切片,通过…

安全芯片 OPTIGA TRUST M 使用介绍与示例(基于STM32裸机)

文章目录 目的资料索引硬件电路软件框架介绍数据存储框架移植框架使用 使用示例示例地址与硬件连接通讯测试功能测试 总结 目的 OPTIGA TRUST M 是英飞凌推出的安全芯片,芯片通提供了很多 slot ,用于存放各类安全证书、密钥、用户数据等,内置…

飞书文档解除复制限制

解除飞书文档没有编辑器权限限制复制功能方法 方法一:使用插件 方法二: 通过调试工具删除所有的copy事件 使用插件 缺点: 只有markdown格式,如果需要其他格式需要再通过Typora等markdown编辑器转pdf,word等格式 安装插件 Cloud Do…

Day02回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文,而 …

关于 Linux 内核“合规要求”与俄罗斯制裁的一些澄清

原文:Michael Larabel - 2024.10.24 当 一些俄罗斯的 Linux 开发者被从内核的 MAINTAINERS 文件中移除 时,原因被描述为“合规要求”,但并未明确这些要求具体涉及什么内容。随后,Linus Torvalds 对此发表了评论,明确指…

便捷之选:微信小程序驱动的停车场管理系统

作者介绍:✌️大厂全栈码农|毕设实战开发,专注于大学生项目实战开发、讲解和毕业答疑辅导。 🍅获取源码联系方式请查看文末🍅 推荐订阅精彩专栏 👇🏻 避免错过下次更新 Springboot项目精选实战案例 更多项目…

2024最新版 Tomcat安装与配置(带图详细步骤)简单易懂

官方网站: Apache Tomcat - 欢迎! 一、选择下载版本(本文选择tomcat 9版本为例) 二、找到你下载压缩包的位置,进行解压 三、配置环境 1)新建系统变量,变量名为: CATALINA_HOME 变…

GoogleChrome和Edge浏览器闪屏问题

GoogleChrome和Edge浏览器闪屏问题 文章目录 GoogleChrome和Edge浏览器闪屏问题 买了电脑半年, GoogleChrome和edge浏览器出现了一个令人头疼的问题–闪屏, 就是打开这两个浏览器之后, 就会出现电脑屏幕一闪一闪的, 过一会就看不见了, 跟黑夜里的闪电一样, 遇到这种情况我都会直…