机器学习python实践——关于ward聚类分层算法的一些个人心得

news2024/10/7 4:33:54

最近在利用python跟着参考书进行机器学习相关实践,相关案例用到了ward算法,但是我理论部分用的是周志华老师的《西瓜书》,书上没有写关于ward的相关介绍,所以自己网上查了一堆资料,都很难说清楚ward算法,幸好最后在何晓群老师的《多元统计分析》这本书找到了比较清晰的说法,所以总结出了一些心得,在这篇文章中记录一下,同时,分享给广大网友,大家一起探讨一下,如果有误,也请谅解。当然,如果这篇文章还能入得了各位“看官”的法眼,麻烦点赞、关注、收藏,支持一下!

一、方差、离差平方和

方差:

离差平方和:

对比方差和离差平方和公式,我们可以清楚的看到,离差平方和就是方差公式中的分子部分

另外,我解释一下,可能很多人在网上看到的离差平方和公式跟我给出的有点区别,但是两者是一样的,只是网上大部分是拆开并且化简过得,而我这个是和起来的,同样因为我ward算法看的是何晓群老师的书,所以跟书上的表达方式保持一致

同时,对于方差,大家网上看到最多的形式应该是上述的形式,但是在聚类分析中,数据点常常是多维数据,所以很多人可能不太清楚对于多维数据方差该如何计算,下面举个二维数据的例子,大家看一下。每个样本通常由两个特征(例如坐标)组成,如(x1,x2),所以方差如下:

其中表示第i个样本点的第一个特征,表示样本均值点的第一个特征   

从上述的公式,我们也就可以知道,离差平方和其实就等于每个样本点到样本均值点的距离的平方和

二、ward算法原理

ward算法认为同类样本之间的离差平方和应该尽量小,不同类之间的离差平方和应该尽量大。

假设,现在有n个样本,我们要将他分成k类,那么第t类样本的离差平方和以及整个类内的离差平方和如下所示:

其中, 表示第t类样本的个数,表示第t类样本中的第i个样本,表示第t类样本的均值点

ward算法的目标就是使得聚类完成之后整个类内的离差平方和达到极小,至于为什么,下面解释一下:

从上面的公式中,我们可以看出来,整个类内的离差平方和就是对各类样本的离差平方和的求和,因为ward要求同类样本之间的离差平方和最小,即要求最小,所以整个类内的离差平方和 也会达到最小

注意:整个类内的离差平方和不等于不同类之间的离差平方和

引用何晓群老师《多元统计分析》一书中的原话:如果直接将所有分类可能性的离差平方和算出来,然后找出使达到极小的分类,那么这个计算量是巨大的,对计算机要求是非常高的,因此,ward算法是一种寻找局部最优解的方法,其思想就是先让n个样品各自成一类,然后每次缩小一类,每缩小一类,离差平方和就要增大,选择使增加最小的两类合并,直到所有的样品归为一类为止

我们应该都知道层次聚类算法,本质上都是通过距离来对样本进行聚类操作,距离相近的簇(类)会被划分到同一簇中,所以,ward算法也为我们提供了一种簇间距的算法,帮助我们直接通过对簇间距的计算来近似获得局部最优解,公式如下:

np表示Gp类中样本个数,nk表示Gk类中的样本个数,nr表示Gr类中的样本个数

可能有些小伙伴对于这个上面的距离递推公式看的很迷,所以下面我会借用SciPy帮助文档例子进行举例说明

三、ward算法距离推导公式举例说明

SciPy帮助文档例子的代码如下:

from scipy.cluster.hierarchy import dendrogram, linkage
from matplotlib import pyplot as plt
X = [[i] for i in [2, 8, 0, 4, 1, 9, 9, 0]]
Z = linkage(X, 'ward')
fig = plt.figure(figsize=(25, 10))
dn = dendrogram(Z)
print(Z)
plt.show()

通过代码我们知道输入的是数组X,输出的是链接数组Z,其中X是一个8行1列的二维数组,每一行数据都代表着一个位置标记,同时,根据网上大佬的说法Z是一个n行4列的数组,前两列表示要聚类的簇的编号,第三列表示两个即将聚类的簇之间的距离,第四列表示聚类所得的新簇中含有的样本个数

Z的输出如下:

对应于第一行数据可能有些小伙伴会觉得疑惑,5、6是哪里来的?因为上文中已经说过了ward算法会先n个样本各成一类,所以5、6代表数组X的8个样本中编号为5和6的样本,数组X的样本编号对照表如下:

X28041990
簇编号01234567

根据表可以知道,簇编号为5、6代表的样本就是两个位置为9的样本

同时,编号5、6的簇又会聚类成会编号为8的新簇,同理,依次递推,编号2、7的样本又会聚类成会聚类成编号为9的新簇……结果如下所示:

进行聚类操作的簇编号5、62、70、41、89、103、1211、13
新聚类的簇编号891011121314

Z的前两列我已经通过表格说明了,但是相信很多人卡就卡在不知道第三列数据是怎么求的

所以下面对Z的第三列数据进行说明:

重点来了!!!!

第一行数据:由第一个表可知编号为5、6的簇,且都仅包含一个样本,所以样本的位置就代表簇的位置,因此两簇的位置都是9,两簇的距离

第二行数据:由第一个表可知编号为2、7的簇,且都仅包含一个样本,所以样本的位置就代表簇的位置,因此两簇的位置都是0,两簇距离

第三行数据:由第一个表可知编号为0、4的簇,且都仅包含一个样本,所以样本的位置就代表簇的位置,因此两簇的位置分别是2和1,两簇的距离

第四行数据:由第一个表可知编号为1簇仅有一个样本,由表二可知编号为8的簇是由簇5和簇6聚类而来,其中含有两个样本,所以,为了计算簇1和簇8之间的距离,这时就需要用到上述所说到的ward算法的距离递推公式,计算流程如下:

 注意:Dw后面括号中的数字代表簇编号

第五行数据:由第二个表可知编号为9的簇是由簇2和簇7聚类而来,其中含有两个样本,编号为10的簇是由簇0和簇4聚类而来,其中含有两个样本,所以,为了计算簇9和簇10之间的距离,这时就需要用到上述所说到的ward算法的距离递推公式,计算流程如下:

 所以:

 因为比较懒,所以第六行与第七行中的第三列数据我就不再详细列计算过程了,大家看了第四行和第五行的计算过程应该也能明白如何使用ward的距离推导公式了

参考文章:

何晓群.多元统计分析(第五版)[M].中国人民大学出版社,2019.

Python层次聚类sci.cluster.hierarchy.linkage函数详解_scipy.cluster.hierarchy-CSDN博客

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

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

相关文章

美PPI意外下降,标普纳指四日连创新高,苹果市值反超微软,美债收益率十周最低

午盘前美股指数一度集体转跌,苹果、微软、英伟达、台积电、高通、博通、美光科技等继续新高,推动标普、纳指和芯片股再破纪录,但道指连跌三日且盘初跌300点,CrowdStrike和甲骨文脱离最高,特斯拉涨7.8%后收涨2.9%&#…

Java——LinkedList

1、链表 1.1 链表的概念及结构 链表在逻辑层面上是连续的,在物理层面上不一定是连续的 链表结构可分为,单向或双向、带头或不带头、循环或非循环,组合共计8种 重点:无头单向非循环链表、无头双向链表 1.2 模拟实现无头单向非…

某信用合作社数据架构规划方案(115页PPT)

方案介绍:为应对数字化转型挑战,某信用合作社计划实施一套新的数据架构,以提高数据处理效率、确保数据安全,并满足业务快速发展的需求。预期成效是完善的数据架构能够全面地提升我社六个方面的竞争能力,更好地服务于目…

大模型辅助编程助手:『小浣熊 Raccoon』 如何使用?

认识 Raccoon Raccoon (Raccoon is Another Code CO-pilOt Navigator) 是基于 AI 的代码助手,是商汤科技发布基于商汤自研大语言模型的智能编程助手,代码小浣熊 Raccoon 支持 Python、Java、JavaScript、C、Go、SQL 等30主流编程语言和 VS Code、Intell…

OpenGL3.3_C++_Windows(3)

GLSL Shader基础 Shader(把输入转化为输出,运行在GPU上):首先要声明版本,有各自的入口点main()顶点数据上限:16个包含4分量:16 * 4 64个分量向量:容器vec。使用.x、.y、.z和.w&am…

docker一些常用命令以及镜像构建完后部署到K8s上

docker一些常用命令以及镜像构建完后部署到K8s上 1.创建文件夹2.删除文件3.复制现有文件内容到新建文件4.打开某个文件5.查看文件列表6.解压文件(tar格式)7.解压镜像8.查看镜像9.删除镜像10.查看容器11.删除容器12.停止运行容器13.构建镜像14.启动容器15…

200元的5G热点机能作为渗透测试测试机,还能当128G移动硬盘,怎么算都值

最近,迫于很多的app渗透测试,急需一个真机,在咸鱼上发现了一款低价5G手机,平时可以当随身WiFi,还可以进行app渗透测试,它就是中兴远航30。 中兴远航30是2022年4月发布的机器,全系只有4G128G和6G…

单例模式、工厂模式 c++关键字 static

static 关键字的作用: 主要作用在于 控制变量或函数的作用域、生命周期以及它们如何被不同部分的程序访问,从而帮助程序员管理内存、避免命名冲突,并实现特定的设计模式(如单例模式)。 1. 静态局部变量:当…

Unity Protobuf+RPC+UniTask

远程过程调用(RPC)协议详解 什么是RPC协议RPC的基本原理RPC的关键组件RPC的优缺点Protobuf函数绑定CallEncodeRecvDecodeSocket.Send和Recv项目地址 什么是RPC协议 远程过程调用(Remote Procedure Call,简称RPC)是一种…

配置Windows客户端连接iSCSI设备

1、运行iSCSI发起程序 控制面板–>系统和安全–>管理工具–>iSCSI发起程序。 2、更改客户端iqn属性 3、点击连接,就会在本次磁盘新加一款硬盘。 4、通过格式化新建卷就可使用该硬盘。

eBay测评,自养号应该如何做?

测评自养号就是自己搭建国外的服务器和IP环境,实现自己注册eBay的买家账号,通过电脑端环境一台电脑就可以无限养号,一次可以开十几个窗口同时浏览下单,每个窗口都是独立的环境,一账号一环境一IP一卡 买家账号掌握在卖…

ARM32开发--存储器介绍

知不足而奋进 望远山而前行 目录 文章目录 前言 存储器分类 RAM ROM EEPROM Flash 总结 前言 在现代计算机系统中,存储器扮演着至关重要的角色,不仅影响着数据的存取速度和稳定性,还直接关系到计算机系统的性能和应用场景的选择。存…

ARM32开发--IIC时钟案例

知不足而奋进 望远山而前行 目录 文章目录 前言 目标 内容 需求 开发流程 移植驱动 修改I2C实现 测试功能 总结 前言 在现代嵌入式系统开发中,移植外设驱动并测试其功能是一项常见的任务。本次学习的目标是掌握移植方法和测试方法,以实现对开…

热门开源大模型项目推荐

一:开源大模型热门项目推荐 NNI:由微软发布的开源AutoML工具包,支持神经网络超参数调整。最新版本对机器学习生命周期的各个环节做了全面支持,包括特征工程、神经网络架构搜索(NAS)、超参调优和模型压缩。适用于各种机器学习项目&…

三极管的厄利效应(early effect)

詹姆斯M厄利(James M. Early)发现的现象,厄利效应(英语:Early effect),又译厄尔利效应,也称基区宽度调制效应,是指当双极性晶体管(BJT)的集电极-射极电压VCE改…

DETR实现目标检测(二)-利用自己训练的模型进行预测

1、图片预测(CPU) 关于DETR模型训练自己的数据集参考上篇文章: DETR实现目标检测(一)-训练自己的数据集-CSDN博客 训练完成后的模型文件保存位置如下: 准备好要预测的图片: 然后直接调用模型进行预测,并设…

基于springboot实现入校申报审批系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现入校申报审批系统演示 摘要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装入校申报审批系统软…

ChatGPT中文镜像网站分享

ChatGPT 是什么? ChatGPT 是 OpenAI 开发的一款基于生成预训练变换器(GPT)架构的大型语言模型。主要通过机器学习生成文本,能够执行包括问答、文章撰写、翻译等多种文本生成任务。截至 2023 年初,ChatGPT 的月活跃用户…

CV每日论文--2024.6.14

1、ICE-G: Image Conditional Editing of 3D Gaussian Splats 中文标题:ICE-G:3D 高斯斑点的图像条件编辑 简介:近年来,出现了许多技术来创建高质量的3D资产和场景。然而,当涉及到这些3D对象的编辑时,现有方法要么速度慢、要么牺牲质量,要么…

基于Python+OpenCV高速公路行驶车辆的速度检测系统

简介: 基于Python和OpenCV的高速公路行驶车辆的速度检测系统旨在实时监测高速公路上的车辆,并测量它们的速度。该系统可以用于交通监控、道路安全管理等领域,为相关部门提供重要的数据支持。 系统实现: 视频流输入:系…