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

对比方差和离差平方和公式,我们可以清楚的看到,离差平方和就是方差公式中的分子部分
另外,我对于离差平方和有两点我要解释一下:
第一点:可能很多人在网上看到的离差平方和公式跟我给出的有点区别,但是两者是一样的,只是网上大部分是拆开并且化简过得,而我这个是和起来的,同样因为我ward算法看的是何晓群老师的书,所以跟书上的表达方式保持一致
第二点:可能很多人在网上看到的离差平方和的符号是ESS,但是我这里却用SS表示,这个我觉得有必要跟大家说清楚,ESS表示的是回归平方和,SS才是离差平方和,两者是完全不同的东西,对此若有质疑,可以查看下面的链接,链接来源于百度百科:
离差平方和_百度百科 (baidu.com);回归平方和_百度百科 (baidu.com)
同时,对于方差,大家网上看到最多的形式应该是上述的形式,但是在聚类分析中,数据点常常是多维数据,所以很多人可能不太清楚对于多维数据方差该如何计算,下面举个二维数据的例子,大家看一下。每个样本通常由两个特征(例如坐标)组成,如(x1,x2),所以方差如下:
![]()
其中
表示第i个样本点的第一个特征,
表示样本均值点的第一个特征
从上述的公式,我们也就可以知道,离差平方和其实就等于每个样本点到样本均值点的距离的平方和
二、ward算法原理
ward算法认为同类样本之间的离差平方和应该尽量小,不同类之间的离差平方和应该尽量大。
假设,现在有n个样本,我们要将他分成k类,那么第t类样本的离差平和
以及整个类内的离差平方和
如下所示:


其中,
表示第t类样本的个数,
表示第t类样本中的第i个样本,
表示第t类样本的均值点
ward算法的目标就是使得聚类完成之后整个类内的离差平方和
达到极小,至于为什么,下面解释一下:
从上面的公式中,我们可以看出来,整个类内的离差平方和
就是对各类样本的离差平方和
的求和,因为ward要求同类样本之间的离差平方和最小,即
要求最小,所以整个类内的离差平方和
也会达到最小
注意:整个类内的离差平方和不等于不同类之间的离差平方和
引用何晓群老师《多元统计分析》一书中的原话:如果直接将所有分类可能性的离差平方和算出来,然后找出使l
达到极小的分类,那么这个计算量是巨大的,对计算机要求是非常高的,因此,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的样本编号对照表如下:
| X | 2 | 8 | 0 | 4 | 1 | 9 | 9 | 0 |
| 簇编号 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
根据表可以知道,簇编号为5、6代表的样本就是两个位置为9的样本
同时,编号5、6的簇又会聚类成会编号为8的新簇,同理,依次递推,编号2、7的样本又会聚类成会聚类成编号为9的新簇……结果如下所示:
| 进行聚类操作的簇编号 | 5、6 | 2、7 | 0、4 | 1、8 | 9、10 | 3、12 | 11、13 |
| 新聚类的簇编号 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
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博客
相关文章:
机器学习python实践——关于ward聚类分层算法的一些个人心得
最近在利用python跟着参考书进行机器学习相关实践,相关案例用到了ward算法,但是我理论部分用的是周志华老师的《西瓜书》,书上没有写关于ward的相关介绍,所以自己网上查了一堆资料,都很难说清楚ward算法,幸…...
从零制作一个docker的镜像
近期docker的镜像仓库不好用了,很多国内的源也无法使用了,所有今天给大家分享一下怎么从零制作一个CentOS镜像。 准备CentOS7最小环境 mkdir /centos7.9-root# 在该目录准备centos的最小环境 sudo yum --installroot/centos7.9-root --releasever7 ins…...
eclipse 老的s2sh(Struts2+Spring+Hibernate) 项目 用import导入直接导致死机(CPU100%)的解决
1、下载Apache Tomcat - Apache Tomcat 8 Software Downloads 图中是8.5.100的版本,下面的设置用的是另一个版本的,其实是一样。 2、先将Server配好,然后再进行导入操作。 2、选择jdk 当然,这里也可以直接“Download and instal…...
《米小圈动画汉字》汉字教育动画化:传统与创新的完美融合!
汉字,作为中华文化的瑰宝,承载着千百年来中华民族的智慧和思想。每一个汉字不仅仅是一个符号,更是一段历史的见证,一种文化的传承。在当今全球化的背景下,汉字教育面临着新的挑战与机遇。在这种背景下,如何…...
【LeetCode最详尽解答】11-盛最多水的容器 Container-With-Most-Water
欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家! 链接: 11-盛最多水的容器 直觉 这个问题可以通过可视化图表来理解和解决。 通过图形化这个…...
redis 缓存jwt令牌设置更新时间 BUG修复
大家好,今天我又又又来了,hhhhh。 上文中 我们永redis缓存了token 但是我们发现了 一个bug ,redis中缓存的token 是单用户才能实现的。 就是 我 redis中存储的键 名 为token 值 是jwt令牌 ,但是如果 用户a 登录 之后 创建一个…...
nginx精准禁止特定国家或者地区IP访问
1、安装依赖 dnf -y install gcc-c libtool gd-devel pcre pcre-devel openssl openssl-devel zlib zlib-devel libmaxminddb-devel pcre-devel zlib-devel gcc gcc-c make git2、获取NGINX安装包并安装 wget https://nginx.org/download/nginx-1.26.1.tar.gz git clone http…...
单片机课设-基于单片机的电子时钟设计(仿真+代码+报告)
基于单片机的电子时钟设计 前言一、课设任务是什么?二、系统总体方案硬件设计2.1 系统硬件总体设计2.2 键盘电路设计2.3 DS1302实时时钟芯片电路设计2.4 复位电路2.5 LCD电路设计 三、软件设计3.1 主程序流程图3.2 主要程序设计代码3.3 修改时间函数3.4 扫描键盘函数 四、仿真…...
.net 6 api 修改URL为小写
我们创建的api项目,url是[Route(“[controller]”)],类似这样子定义的。我们的controller命名是大写字母开头的,显示在url很明显不是很好看(url不区分大小写)。转换方式: var builder WebApplication.Crea…...
Windows电脑部署Jellyfin服务端并进行远程访问配置详细教程
文章目录 前言1. Jellyfin服务网站搭建1.1 Jellyfin下载和安装1.2 Jellyfin网页测试 2.本地网页发布2.1 cpolar的安装和注册2.2 Cpolar云端设置2.3 Cpolar本地设置 3.公网访问测试4. 结语 前言 本文主要分享如何使用Windows电脑本地部署Jellyfin影音服务并结合cpolar内网穿透工…...
rsync同步目录脚本
假设有两台服务器的示例 IP 地址为: Server A: 192.168.1.100Server B: 192.168.1.200 现在来解释如何使用这个脚本进行服务器之间文件夹内容的同步,保留路径和服务器信息的抽象化。 1. 脚本文件位置和权限 假设脚本文件位于 /root/script.sh&#x…...
LeetCode 6. Z 字形变换
LeetCode 6. Z 字形变换 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下: 之后,你的输出需要从左往右逐行读取,产生…...
RTC实时时钟
一、Unix时间戳 1、Unix 时间戳 (1)Unix 时间戳(Unix Timestamp)定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数,不考虑闰秒 (2)时间戳存储在一个秒计数器中,秒计数器为…...
WHAT - React 学习系列(一)
官方文档 If you have a lot of HTML to port to JSX, you can use an online converter. You’ll get two things from useState: the current state (count), and the function that lets you update it (setCount). To “remember” things, components use state.To mak…...
代理模式(静态代理/动态代理)
代理模式(Proxy Pattern) 一 定义 为其他对象提供一种代理,以控制对这个对象的访问。 代理对象在客户端和目标对象之间起到了中介作用,起到保护或增强目标对象的作用。 属于结构型设计模式。 代理模式分为静态代理和动态代理。…...
Word2Vec基本实践
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…...
IIS配置網站登錄驗證,禁止匿名登陸
需要維護一個以前的舊系統,這個系統在內網運行,需要抓取電腦的登陸賬號,作為權限管理的一部分因此需要在IIS配置一下...
抖音矩阵系统搭建,AI剪辑短视频,一键管理矩阵账号
目录 前言: 一、抖音矩阵系统有哪些功能? 1.AI智能文案 2.多平台账号授权 3.多种剪辑模式 4. 矩阵一键发布,智能发布 5.抖音爆店码功能 6.私信实时互动 7.去水印及外链 二、抖音矩阵系统可以解决哪些问题? 总结ÿ…...
山东大学软件学院创新项目实训开发日志——收尾篇
山东大学软件学院创新项目实训开发日志——收尾篇 项目名称:ModuFusion Visionary:实现跨模态文本与视觉的相关推荐 -------项目目标: 本项目旨在开发一款跨模态交互式应用,用户可以上传图片或视频,并使用文本、点、…...
vue2.7支持组合式API,但是对应的vue-router3并不支持useRoute、useRouter。
最近在做一个项目,因为目标用户浏览器版本并不确定,可能会有较旧版本,于是采用vue2.7而不是vue3,最近一年多使用vue3开发的项目都碰到了很多chrome 63-73版本,而对应UI 库 element plus又问题很多。 为了不碰到这些问…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
