距离和相似性度量

news2024/12/23 23:16:58

文章目录

  • 1. 距离度量
    • 1.1 欧几里得距离(Euclidean Distance)
    • 1.2 明可夫斯基距离(Minkowski Distance)
    • 1.3 曼哈顿距离(Manhattan Distance)
    • 1.4 切比雪夫距离(Chebyshev Distance)
    • 1.5 马哈拉诺比斯距离(Mahalanobis Distance)
  • 2. 相似性度量
    • 2.1 向量空间余弦相似度(Cosine Similarity)
    • 2.2 皮尔森相关系数(Pearson Correlation Coefficient)
    • 2.3 Jaccard相似系数(Jaccard Coefficient)
    • 2.4 调整余弦相似度(Adjusted Cosine Similarity)
  • 3. 欧氏距离与余弦相似度的比较
  • 4. Python计算欧氏距离与余弦相似度
    • 4.1 Python计算欧氏距离
    • 4.2 Python计算余弦相似度
  • 5. 源码仓库地址

在机器学习中,经常需要比较个体间差异的大小,进而评价个体的相似性和类别。最常见的是数据分析中的相关分析,数据挖掘中的分类和聚类算法,如K最近邻(KNN)和K均值(K-Means)等。其中,衡量个体间差异的方法,主要分为距离度量和相似性度量。

为了方便下面的解释和举例,先设定我们要比较X个体和Y个体间的差异,它们都包含了N个维的特征,即X=(x1, x2, x3, … xn),Y=(y1, y2, y3, … yn)。

1. 距离度量

距离度量(Distance)用于衡量个体在空间上存在的距离,距离越远说明个体间的差异越大。对于任意一个定义在两个矢量x和y上的函数d(x,y),只要满足如下4个性质就可以称作“距离度量”。
(1)非负性:d(x,y)≥0
(2)对称性:d(x,y)=d(y,x)
(3)自反性:d(x,y)=0,当且仅当x=y
(4)三角不等式:d(x,y)≤d(x,z)+d(y,z)

1.1 欧几里得距离(Euclidean Distance)

欧氏距离是最常见的距离度量,衡量的是多维空间中各个点之间的绝对距离。公式如下:

在这里插入图片描述

因为计算是基于各维度特征的绝对数值,所以欧氏度量需要保证各维度指标在相同的刻度级别,比如对身高(cm)和体重(kg)两个单位不同的指标使用欧式距离可能使结果失效。

1.2 明可夫斯基距离(Minkowski Distance)

明氏距离是欧氏距离的推广,是对多个距离度量公式的概括性的表述。公式如下:

在这里插入图片描述

这里的p值是一个变量,当p=2时就得到了上节的欧氏距离。

1.3 曼哈顿距离(Manhattan Distance)

曼哈顿距离来源于城市区块距离,是将多个维度上的距离进行求和后的结果,即当上节的明氏距离中p=1时得到的距离度量公式,如下所示:

在这里插入图片描述

1.4 切比雪夫距离(Chebyshev Distance)

切比雪夫距离起源于国际象棋中国王的走法,我们知道国际象棋国王每次只能往周围的8格中走一步,那么如果要从棋盘中A格(x1, y1)走到B格(x2, y2)最少需要走几步?扩展到多维空间,其实切比雪夫距离就是当p趋向于无穷大时的明氏距离:

在这里插入图片描述

P.S. 其实上面的曼哈顿距离、欧氏距离和切比雪夫距离都是明可夫斯基距离在特殊条件下的应用。

1.5 马哈拉诺比斯距离(Mahalanobis Distance)

既然欧几里得距离无法忽略指标度量的差异,所以在使用欧氏距离之前需要对底层指标进行数据的标准化,而基于各指标维度进行标准化后再使用欧氏距离就衍生出来另外一个距离度量——马哈拉诺比斯距离(Mahalanobis Distance),简称马氏距离。

2. 相似性度量

相似性度量(Similarity),即计算个体间的相似程度,与距离度量相反,相似性度量的值越小,说明个体间相似度越小,差异越大。

2.1 向量空间余弦相似度(Cosine Similarity)

余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。公式如下:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RpKn0kIu-1686798840568)(距离和相似性度量/6.png)]

在这里插入图片描述

2.2 皮尔森相关系数(Pearson Correlation Coefficient)

即相关分析中的相关系数r,分别对X和Y基于自身总体标准化后计算空间向量的余弦夹角。公式如下:

在这里插入图片描述

2.3 Jaccard相似系数(Jaccard Coefficient)

Jaccard系数主要用于计算符号度量或布尔值度量的个体间的相似度,因为个体的特征属性都是由符号度量或者布尔值标识,因此无法衡量差异具体值的大小,只能获得“是否相同”这个结果,所以Jaccard系数只关心个体间共同具有的特征是否一致这个问题。如果比较X与Y的Jaccard相似系数,只比较xn和yn中相同的个数,公式如下:

在这里插入图片描述

2.4 调整余弦相似度(Adjusted Cosine Similarity)

虽然余弦相似度对个体间存在的偏见可以进行一定的修正,但是因为只能分辨个体在维之间的差异,没法衡量每个维数值的差异,会导致这样一个情况:比如用户对内容评分,5分制,X和Y两个用户对两个内容的评分分别为(1,2)和(4,5),使用余弦相似度得出的结果是0.98,两者极为相似,但从评分上看X似乎不喜欢这2个内容,而Y比较喜欢,余弦相似度对数值的不敏感导致了结果的误差,需要修正这种不合理性,就出现了调整余弦相似度,即所有维度上的数值都减去一个均值,比如X和Y的评分均值都是3,那么调整后为(-2,-1)和(1,2),再用余弦相似度计算,得到-0.8,相似度为负值并且差异不小,但显然更加符合现实。

3. 欧氏距离与余弦相似度的比较

欧氏距离是最常见的距离度量,而余弦相似度则是最常见的相似度度量,很多的距离度量和相似度度量都是基于这两者的变形和衍生,所以下面重点比较下两者在衡量个体差异时实现方式和应用环境上的区别。

借助三维坐标系来看下欧氏距离和余弦相似度的区别:

在这里插入图片描述

从图上可以看出距离度量衡量的是空间各点间的绝对距离,跟各个点所在的位置坐标(即个体特征维度的数值)直接相关;而余弦相似度衡量的是空间向量的夹角,更加的是体现在方向上的差异,而不是位置。如果保持A点的位置不变,B点朝原方向远离坐标轴原点,那么这个时候余弦相似度cosθ是保持不变的,因为夹角不变,而A、B两点的距离显然在发生改变,这就是欧氏距离和余弦相似度的不同之处。

根据欧氏距离和余弦相似度各自的计算方式和衡量特征,分别适用于不同的数据分析模型:

  • 欧氏距离能够体现个体数值特征的绝对差异,所以更多的用于需要从维度的数值大小中体现差异的分析,如使用用户行为指标分析用户价值的相似度或差异;

  • 余弦相似度更多的是从方向上区分差异,而对绝对的数值不敏感,更多的用于使用用户对内容评分来区分用户兴趣的相似度和差异,同时修正了用户间可能存在的度量标准不统一的问题(因为余弦相似度对绝对数值不敏感)。

4. Python计算欧氏距离与余弦相似度

4.1 Python计算欧氏距离

以下代码提供了3种计算欧氏距离的方法:

import numpy as np

x=np.random.random(10)
y=np.random.random(10)

# 方法一:根据公式求解
d1=np.sqrt(np.sum(np.square(x-y)))
 
# 方法二:根据scipy库求解
from scipy.spatial.distance import pdist
X=np.vstack([x,y])  # 将x,y两个一维数组合并成一个2D数组:[[x1,x2,x3...],[y1,y2,y3...]]
d2=pdist(X) # d2=np.sqrt((x1-y1)+(x2-y2)+....)

# 方法三:使用numpy.linalg.norm(x, y)可以计算向量 x 和向量 y 的欧氏距离
d3=np.linalg.norm(x-y)

print(d1, d2, d3)

以上3种方法得到的结果一致。

4.2 Python计算余弦相似度

以下代码提供了3种计算余弦相似度的方法:

import numpy as np

x=np.random.random(10)
y=np.random.random(10)

# 方法一:scipy中的scipy.spatial.distance.cosine函数可计算余弦距离。
# 因此,我们可以用1减去余弦距离得到余弦相似度。
from scipy import spatial
res1 = 1 - spatial.distance.cosine(x, y)
print(res1)

# 方法二:numpy中的numpy.dot函数可以两个向量的点积,numpy.linalg.norm函数可以计算向量的欧氏距离。
# 因此,可以通过公式和这两个函数计算向量的余弦相似度。
from numpy import dot
from numpy.linalg import norm
res2 = dot(x, y) / (norm(x) * norm(y))
print(res2)

# 方法三:sklearn中的sklearn.metrics.pairwise.cosine_similarity函数可直接计算出两个向量的余弦相似度。
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
res3 = cosine_similarity(x.reshape(1, -1), y.reshape(1, -1)) # reshape(1, -1)将矩阵转化成1行
print(res3)

以上3种方法得到的结果一致。

5. 源码仓库地址

🌼 图像处理、机器学习的常用算法汇总

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

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

相关文章

盘点五种最常用加密算法!

大家好,我是老三,大家都知道我是一个臭做支付的,支付常常要和一些加签、验签,加密、解密打交道,今天,就给大家来盘点一下最常见的5种加密算法。 前言 大家平时的工作中,可能也在很多地方用到了…

封神榜科技成果 - 国产训练大模型

封神榜科技成果 Fengshenbang 1.0: 封神榜开源计划1.0中英双语总论文,旨在成为中文认知智能的基础设施。 BioBART: 由清华大学和IDEA研究院一起提供的生物医疗领域的生成语言模型。(BioNLP 2022) UniMC: 针对zero-shot场景下基于标签数据集的统一模型。(EMNLP 2022)…

STM32单片机(六)TIM定时器 -> 第三节:TIM输出比较

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

『2023北京智源大会』视觉与多模态大模型

『2023北京智源大会』视觉与多模态大模型 文章目录 一. Drag Your GAN: Interactive Point-based Manipulation on the Generative Image Manifold | 潘新钢 | 南洋理工大学1. Image Manipulation(图像编辑)背景2. Drag Your GAN 二. Machine Learning for 3D Content Creatio…

实验篇(7.2) 14. 站对站安全隧道 - 多条隧道负载均衡(上)(FortiGate-IPsec) ❀ 远程访问

【简介】IPsec VPN虽然价廉物美,但是由运营商原因,经常会出访问慢、不稳定甚至断开的情况,好在现在大多数企业都有二条甚至更多条宽带,我们可以创建多条IPsec VPN,来保证正常访问。 实验要求与环境 OldMei集团深圳总部…

友盟分享之新浪微博站(签名apk下载)

适用环境: 1 单独集成新浪微博分享 2 友盟分享新浪微博 集成步骤: 1 注册新浪微博开发者账号 新浪微博开放平台-首页 2 选择要接入的应用类型 根据官网提示输入对应资料,进行申请 4 创建应用的时候,Android需要输入签名&#x…

NFC无源电子墨水屏

NFC电子纸造就无源可视 电子墨水标签 NFCE-paper For NFC Batteryless E-ink Tag 产品参数 产品型号 PN29_S 尺寸(mm) 95*46.4*5.4mm 显示技术 电子墨水屏 显示区域(mm) 29(H) * 66.9(V) 分辨率(像素) 296*128 像素尺寸(mm) 0.227*0.226 显示颜色 黑/白 视…

摩尔定律放缓后,AMD应如何引领自适应的风潮?

编者按:自适应计算如何为核心市场带来动力?近日,在AMD“自适应和嵌入式产品技术日”活动日上,AMD 全球副总裁唐晓蕾表示,创新是驱动发展的引擎,百行百业的数字化与智能化转型离不开创新输送的源源不断的强劲…

【监控】Zabbix:企业级开源监控解决方案

文章目录 一、zabbix的基本概述二、zabbix的构成三、zabbix的监控对象四、zabbix的常用术语五、zabbix的工作流程六、zabbix进程详解七、zabbix的监控框架7.1 三种架构模式的架构图如下:7.2 每个模块的工作职责: 八、zabbix源码安装及部署一、服务端安装…

电子工程师,一起来聊聊PCB板上的Mark点吧

在PCB设计中,电子工程师需要注意很多方面,新手工程师经常会忽略Mark点,但资深工程师们却对Mark点又爱又恨,甚至不得不花时间耗费在Mark点上,为什么Mark点如此重要?该如何设计Mark点? 一、Mark点…

Linux基础IO - 文件系统 | 软硬链接

之前的文章中我们与文件有关的内容谈论的都是被打开的文件,那么如果文件没有被打开呢?这样文件就一定不再内存中,只能在磁盘外设中存储,本文中我们就来讲述磁盘中文件的相关知识。 磁盘的物理存储结构 一个磁盘由多个盘片叠加而…

如何撰写高效且实用的Prompt

很多人说GPT并没有什么让人惊艳的地方,但实际上,他们并没有发挥好它的潜能。在很多情况下,他们往往没有使用恰当的prompt。一个恰到好处的prompt就如同魔法师在施展魔法时所需要吟唱的咒语,只有那些正确无误的咒语,才能…

Zstack实习-基础知识总结归纳-持续更新

什么是虚拟化? 虚拟化技术是一种将物理计算资源,如服务器、存储和网络等,转化成虚拟的逻辑资源的技术。通过虚拟化技术,可以将多个独立的操作系统运行在同一台物理计算机上,实现资源的共享,提高硬件的利用率…

商业智能之“道、法、器”——企业级BI能力构建指南

一个企业级BI项目看似简单,但实际建设难度却远超想象。如何从0到1搭建BI项目,有没有详细的实施步骤,有没有合适的BI工具推荐,这是很多企业在上BI系统前心中的疑问。因此,本文会详细探讨企业BI能力构建,到底…

【业务功能篇26】 ROW_NUMBER() 排名函数 给表单数据增加序列号

业务场景: 当业务在进行月报报表制作时,会有些模块是需要填充当前月的top问题单,那么这些问题单,在第一列就要给标记序列号从1开始的序号,所以这个序号是根据业务选择的问题单后,在根据当前问题单记录进行的…

BSN全球技术创新发展峰会在武汉举办,“延安链”正式发布

原标题:《第二届BSN全球技术创新发展峰会在武汉成功举行》 6月9日,由湖北省人民政府指导,湖北省发展改革委、国家信息中心联合主办,中国移动、中国电信、中国联通、武汉市江汉区人民政府、区块链服务网络(BSN&#xf…

Linux或Windows上实现端口映射

关注“云计算就该这么学”微信公众号,搜索“001”,即可获取氪肝整理的154页Linux学习笔记。 通常服务器会有许多块网卡,因此也可能会连接到不同的网络,在隔离的网络中,某些服务可能会需要进行通信,此时服务…

I.MX6ULL_Linux_驱动篇(38) 中断驱动

不管是裸机实验还是 Linux 下的驱动实验,中断都是频繁使用的功能,在裸机中使用中断我们需要做一大堆的工作,比如配置寄存器,使能 IRQ 等等。 Linux 内核提供了完善的中断框架,我们只需要申请中断,然后注册中…

Linux进程信号 | 信号保存

阻塞信号 信号其他相关常见概念 实际执行信号的处理动作称为信号递达(Delivery)信号从产生到递达之间的状态,称为信号未决(Pending)。进程可以选择阻塞 (Block )某个信号。被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作.注意,阻塞和忽略是…

A Survey of Large Language Models

本文是LLM系列的第一篇文章,针对《A Survey of Large Language Models》的翻译。 大语言模型综述 摘要1 引言2 概述2.1 LLM的背景2.2 GPT系列模型 的技术演化 3 LLMs的资源3.1 公开可用的模型检查点或APIs3.2 常用的语料库3.3 库资源 4 预训练4.1 数据收集4.1.1 数…