聚类距离度量(保姆级讲解,包学会~)

server/2024/10/19 23:48:01/

        在机器学习聚类中,我们通常需要使用距离来进行类的划分,或者比较不同类之间的各种距离,这里我们介绍西瓜书上所提出的一些距离计算方式。

        首先介绍一下距离的一些性质:

西瓜书上给出了四条性质,第一个是非负性,这个好理解,一般来说,距离不会产生负值。下面三条我们结合着例子解释,如下图:

        我们看图,这里我们就采用大家都熟悉的欧式距离来说明,第二条距离为零,那肯定就是一个点的距离,比如图中的A到A的距离;第三条的意思就是A到B的距离等于B到A的距离;第四条就是三角形的两边之和大于第三边,反应到图上就是B到C的距离小于B到A距离加A到C的距离。

        接下来介绍距离公式,如图所示:

第一个公式其实是一个总结的公式,我们令p为2就得到大家熟悉的欧式距离了,至于p为1时的曼哈顿距离,我们看下图:

        图中的绿色线就是欧式距离,蓝线、红线、黄线都是曼哈顿距离,并且它们的距离都相等,这是为什么呢?其实,曼哈顿距离就是两点的横坐标和纵坐标之差再相加,在现实情况中,曼哈顿距离可能会更常用,因为一般情况下两点之间总会有遮挡物,需要避开。

        上述说的都是可以直接对“数”进行计算的,那有些不是数值型变量的,我们又该如何进行计算的呢?比如下图中的变量:

比如图中这种变量的,我们又该如何计算距离?西瓜书中给出了一种方案:

书中的公式看着好复杂呀,那我们先不看公式,我们先看一个例子:

        我们看图中,假设说在颜色这个属性上,有红色和蓝色这两个值,一共有三个分类,我们看,第一个分类里面有七个红色,10个蓝色,红色总数有11个,蓝色总数有17,那在第一个类里面的距离计算就是红色的个数除以红色总数,蓝色的个数除以蓝色总数,就算出来了,以此类推,其他类也是这样,再把所有值相加就得出VDM了。

        现在再回头看上述的公式,是不是就很简单啦?

最后我们再介绍两种变形的公式:

第一个公式就是对于那种既有数值变量也有列名变量混合的计算公式,就是两种公式混合起来。

第二个公式加了一个权重,可能会有某些样本值得重要程度不同,所以加了权重,其实和前面距离计算公式差不多。

ok,这篇就到这里啦,欢迎小伙伴们批评指正~(图片来源于西瓜书和网络)


http://www.ppmy.cn/server/52853.html

相关文章

【Pytorch实用教程】如何在多个GPU上使用分布式数据并行进行训练模型

文章目录 1. 代码(可直接运行,含随机生成的训练数据)2. 代码的详细解释2.1. 导入必要的库和模块2.2. 设置每个进程的初始设置2.3. 随机生成数据集类 `RandomDataset`2.4. 训练函数 `train`1. 代码(可直接运行,含随机生成的训练数据) 以下是一个基于PyTorch的多GPU分布式…

PB12.5用DataWindow保存数据非法操作问题解析

在做一个WebService项目时,遇到个问题:在模拟请求WebService服务时,出现列机现象。经排查日志发现是在DataWindow的update时,死掉了。 排查分析: 1、在PB的数据库面板中,选中数据库表,点Grid显…

Linux上使用 git 命令行

在 Github或者 gitee 注册账号 这个比较简单 , 参考着官网提示即可 . 需要进行邮箱校验.以下以创建Github为例。 创建项目 1. 登陆成功后 , 进入个人主页 , 点击下方的 create a new repository 按钮新建项目 2. 在创建好的项目页面中复制项目的链接 , 以备接下来进行下…

rtthread stm32h743的使用(十)i2c设备使用

我们要在rtthread studio 开发环境中建立stm32h743xih6芯片的工程。我们使用一块stm32h743及fpga的核心板完成相关实验,核心板如图: 1.建立新工程,选择相应的芯片型号及debug引脚及调试器 2.打开cubemux,设置外部时钟及串口外设…

Rcmp: Reconstructing RDMA-Based Memory Disaggregation via CXL——论文阅读

TACO 2024 Paper CXL论文阅读笔记整理 背景 RDMA:RDMA是一系列协议,允许一台机器通过网络直接访问远程机器中的数据。RDMA协议通常固定在RDMA NIC(RNIC)上,具有高带宽(>10 GB/s)和微秒级延…

ubuntu中如何使用supervisor管理进程

文章目录 概述安装Supervisor配置Supervisor创建进程配置文件 启动和管理Supervisor 概述 Supervisor 是一个用 Python 编写的进程管理工具,专为 Linux/Unix 系统设计,用于方便地管理和控制后台进程,通常用于服务器环境中管理长时间运行的进…

输入/输出文字

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在海龟绘图中,也可以输入或者输出文字,下面分别进行介绍。 1 输出文字 输出文字可以使用write()方法来实现,语…

利用Linked SQL Server提权

点击星标,即时接收最新推文 本文选自《内网安全攻防:红队之路》 扫描二维码五折购书 利用Linked SQL Server提权 Linked SQL server是一个SQL Server数据库中的对象,它可以连接到另一个SQL Server或非SQL Server数据源(如Oracle&a…