当前位置: 首页 > news >正文

相似度度量方法有哪些?

一、什么是相似度

        在数学和计算机科学中,向量通常由一组有序的数值组成,可以代表多种类型的数据,如文本、图像、声音等。向量相似度是指衡量两个向量在多维空间中相似程度的指标。向量相似度的计算方法有很多种,不同的方法适用于不同的场景。

二、常见的向量相似度度量方法

1、欧氏距离(Euclidean Distance)

        欧氏距离(Euclidean Distance),也称为欧几里得距离,是最常用的空间距离度量之一。它用于衡量多维空间中两点之间的直线距离。在二维和三维空间中,欧氏距离对应于日常生活中的直观概念,即两点之间的“最短距离”。

        在二维平面上,如果有两个点A(x_{1},y_{1})B(x_{2},y_{2}),那么它们之间的欧氏距离d可以通过下面的公式计算:

d(A,B) = \sqrt{(x_{2}-x_{1})^{2}+(y_{2}-y_{1})^{2}}

        对于n维空间中的两个点A(a_{1},a_{2},...,a_{n})B(b_{1},b_{2},...,b_{n}),欧氏距离的计算公式为:

d(A,B) = \sqrt{\sum_{i=1}^{n}(a_{i}-b_{i})^{2}}

        欧氏距离直观地反映了点与点之间的“实际”距离。然而,在高维空间中,欧氏距离可能会受到维度灾难的影响,距离变得不那么重要。

2、余弦相似度(Cosine Similarity)

        余弦相似度(Cosine Similarity)是一种常用来衡量两个向量在多维空间中方向上的相似性的方法。它主要关注向量的方向而不是它们的幅度。余弦相似度的范围从-1到1,其中1表示完全相同的方向(完全相似),0表示正交(完全不相似),-1表示完全相反的方向。余弦相似度是基于两个向量之间的角度的余弦值来计算的。在文本挖掘中,余弦相似度常用于比较文档或查询与文档之间的相似性,因为它可以有效地忽略文档长度的影响。

        在二维空间中,可以通过下面的公式计算两个向量之间的余弦相似度:

CS(A,B) = \frac{A\cdot B}{||A||\times ||B||}

        其中,A⋅B是向量A和B的点积(内积),||A||是向量A的欧几里得范数(模长),||B||是向量B的欧几里得范数(模长)。

        对于n维空间中的两个向量A和B,余弦相似度的计算公式可以扩展为:

CS(A,B) = \frac{\sum_{i=1}^{n}A_{i} \cdot B_{i}}{\sqrt{\sum_{i=1}^{n}A_{i}^{2}}\times \sqrt{\sum_{i=1}^{n}B_{i}^{2}}}

        其中,A_{i}B_{i}分别是向量A和B在第i维的分量,分子是两个向量的点积,分母是两个向量的模长之积。

3、曼哈顿距离(Manhattan Distance)

        曼哈顿距离(Manhattan Distance),也称为L1距离或城市街区距离,是一种在数学中用来度量两点在标准坐标系上的绝对轴距总和的度量方式。它通过将两点在各坐标轴上的绝对差相加来计算距离,因此也被称为出租车距离,因为这种距离度量方式类似于在城市街道上行驶的距离,其中只能沿着街道水平或垂直移动。

        对于二维空间中的两个点A(x_{1},y_{1})B(x_{2},y_{2}),曼哈顿距离D可以通过以下公式计算:

D(A,B) = |x_{1}-x_{2}|+|y_{1}-y_{2}|

        在更高维度的空间中,曼哈顿距离的计算方式是类似的,需要考虑额外的维度。例如,在三维空间中,对于点A(x_{1},y_{1},z_{1})B(x_{2},y_{2},z_{2}),曼哈顿距离D可以表示为:

D(A,B) = |x_{1}-x_{2}|+|y_{1}-y_{2}|+|z_{1}-z_{2}|

        曼哈顿距离计算过程简单,易于理解和实现。在城市规划、游戏开发和路径规划等领域中,曼哈顿距离能够更好地模拟真实世界的移动限制。但在某些情况下,曼哈顿距离可能会忽略两点之间的最短路径。

4、p范数 

        p范数(Minkowski Norm)是一类距离函数的统称,用于在n维空间中衡量两点之间的距离。事实上,欧氏距离和曼哈顿距离都可以视为p范数的特例。p范数定义为:

||x||_{p} = (\sum_{i=1}^{n}|x_{i}|^{p})^{\frac{1}{p}}

        其中,x是一个n维向量,x_{i}是向量的第i个分量。当p=2时,p范数对应于欧氏距离,当p=1时,p范数对应于曼哈顿距离。

三、python应用

1、欧氏距离

import numpy as np# 定义两个向量
A = np.array([1, 2, 3])
B = np.array([4, 5, 6])# 计算欧氏距离
euclidean_dist = np.linalg.norm(A - B)print(f"欧氏距离: {euclidean_dist}")

2、余弦相似度

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity# 定义两个向量
A = np.array([1, 2, 3])
B = np.array([4, 5, 6])# 计算余弦相似度
cos_sim = cosine_similarity(A.reshape(1, -1), B.reshape(1, -1))print(f"余弦相似度: {cos_sim[0][0]}")

3、曼哈顿距离

def manhattan_distance(point1, point2):return abs(point1[0] - point2[0]) + abs(point1[1] - point2[1])# 示例
point1 = (1, 2)
point2 = (4, 6)
distance = manhattan_distance(point1, point2)
print(f"曼哈顿距离: {distance}")

四、总结

        除了上面介绍到的几种,还有多种距离/相似度度量方法,并没有哪一种方法能够完全胜任所有任务,因此基本都是先根据经验选择某一种方法,然后在时间、资源充裕的情况下通过实验对比不同的方法效果,从而敲定最后使用哪一种。按笔者的经验,数值型数据建模任务中,欧氏距离是最为常用的,而涉及文本向量的相似度计算更为常用的是余弦相似度。

相关文章:

  • 数据结构--单链表
  • 创建Express后端项目
  • python之装饰器、迭代器、生成器
  • linux ip命令使用
  • npm run build报Cannot find module错误的解决方法
  • 容器技术介绍
  • 卷积神经网络(CNN)图像处理与识别原理
  • CE认证大电流计量装置
  • 如何把PDF样本册转换为网址链接
  • 护眼台灯哪个品牌更好?五款由专业眼科医生推荐的护眼台灯
  • 什么是ISO9001认证
  • STM32嵌入式编程学习到提高:【4】UART串口打印
  • DNS与host文件
  • GloVe(全局词向量嵌入)
  • 【Linux】环境变量(初步认识环境变量)
  • [PHP内核探索]PHP中的哈希表
  • [LeetCode] Wiggle Sort
  • [译] React v16.8: 含有Hooks的版本
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • git 常用命令
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JAVA_NIO系列——Channel和Buffer详解
  • magento 货币换算
  • python_bomb----数据类型总结
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • V4L2视频输入框架概述
  • Vue.js 移动端适配之 vw 解决方案
  • 阿里云前端周刊 - 第 26 期
  • 从零搭建Koa2 Server
  • 构建工具 - 收藏集 - 掘金
  • 聚簇索引和非聚簇索引
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 试着探索高并发下的系统架构面貌
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • (3)llvm ir转换过程
  • (day6) 319. 灯泡开关
  • (LeetCode 49)Anagrams
  • (ZT)一个美国文科博士的YardLife
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)计算机毕业设计ssm电影分享网站
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (四)Linux Shell编程——输入输出重定向
  • (一)Java算法:二分查找
  • (原創) 物件導向與老子思想 (OO)
  • (转)拼包函数及网络封包的异常处理(含代码)
  • ***测试-HTTP方法
  • .mysql secret在哪_MySQL如何使用索引
  • .net2005怎么读string形的xml,不是xml文件。
  • .NET使用存储过程实现对数据库的增删改查
  • /bin、/sbin、/usr/bin、/usr/sbin
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • @property括号内属性讲解
  • @Transactional事务注解内含乾坤?