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

相似度计算

相似度计算是分类和聚类算法的前提
优秀的算法将类间的距离分的非常大,而类内的距离很小

欧几里得距离

欧式距离(Euclidean distance)是最常见、最直观的“直线距离”度量方式。它来源于欧几里得几何,用来计算两个点之间的“最短路径”长度。

数学定义

二维平面:两点 P(x_1, y_1) 与 Q(x_2, y_2) 的欧式距离
在这里插入图片描述
n 维空间:向量 X=(x_1,…,x_n) 与 Y=(y_1,…,y_n)
在这里插入图片描述

应用场景

KNN、K-means:样本相似度度量。
SLAM、机器人:路径规划中的“实际直线”距离。
图像处理:像素级差异度量(如 PSNR)。
推荐系统:把用户/物品嵌入向量后计算距离。

曼哈顿距离

曼哈顿距离(Manhattan Distance),又叫出租车几何(Taxicab Geometry)或 L1 距离,是衡量两点在“网格”状空间里沿轴对齐路径最短距离的一种方式。直观地讲,它模拟了在棋盘格城市(如纽约曼哈顿)里,出租车只能沿着水平和垂直街道行驶,而不能斜穿街区时,从 A 到 B 需要走过的街区总数。

数学定义

对于 n 维空间中的两点
P = (p₁, p₂, …, pₙ)
Q = (q₁, q₂, …, qₙ)
曼哈顿距离为:
D₁(P, Q) = Σᵢ |pᵢ − qᵢ|

应用场景

高维稀疏数据(文本 TF-IDF、推荐系统)
需要轴对齐可解释性的场景(如特征工程、规则系统)
对异常值更鲁棒,计算比欧氏距离更快(无平方、开方)
A* 寻路、网格地图上的启发函数 h(n) 常用曼哈顿距离(若只能四向移动)

切比雪夫距离

切比雪夫距离(Chebyshev distance,也叫 L∞ 距离或棋盘距离)是度量两个向量之间差异的一种“最极端”方式

数学定义

对于 n 维空间中的两个点
P = (p₁, p₂, …, pₙ)
Q = (q₁, q₂, …, qₙ)
其切比雪夫距离
d∞(P, Q) = maxᵢ |pᵢ − qᵢ|

应用场景

棋盘/网格路径规划(A*、Dijkstra 用切比雪夫启发式)。
某些鲁棒优化问题:当系统对“最坏维度误差”敏感时,用 L∞ 作为损失。
数字图像处理中的膨胀、腐蚀算子(最大滤波器)。
聚类或 k-NN 中,当特征量纲差异很大且只关心“有没有维度严重偏离”时,L∞ 可避免被小尺度维度主导。

闵可夫斯基距离

闵可夫斯基距离(Minkowski Distance)是一类通用的距离度量,它把许多我们熟悉的距离公式统一成一个带参数的“家族”。

数学表达

给定两个 n 维向量x = (x₁, x₂, …, xₙ)
y = (y₁, y₂, …, yₙ)
闵可夫斯基距离定义为  
Dₚ(x, y) = (∑ᵢ |xᵢ − yᵢ|ᵖ)^(1/p)  (p ≥ 1)
其中 p 是一个可调的超参数。

家族成员速览

p = 1:曼哈顿距离(L₁)
城市街区式的“只能走格子”路径长度。
p = 2:欧氏距离(L₂)
我们日常直觉里的“直线距离”。
p → ∞:切比雪夫距离(L∞)
只关注差异最大的那一维:maxᵢ |xᵢ − yᵢ|。

直观理解

把 p 想成“对差异的敏感度”:
p 越小,越“平等”地对待每一维的差异;
p 越大,越“放大”最大差异维度的影响。

应用场景

机器学习特征缩放:不同 p 的选择会改变聚类或 k-NN 对特征重要性的权衡。
异常检测:p 较大时,异常值对距离贡献更突出。
图像/信号处理:根据噪声维度特性选择合适的 p,调节对局部或全局差异的敏感度。

马哈拉诺比斯距离

马哈拉诺比斯距离(Mahalanobis Distance)可以一句话概括为:“考虑了变量相关性的加权欧氏距离”。它比普通的欧氏距离更聪明,能纠正不同尺度、不同相关性的变量带来的偏差。

数学定义

给定一个随机向量 X in Rp 和其分布的协方差矩阵 S(正定),与均值向量 mu的马氏距离为:若 S 是单位矩阵(变量独立且方差相等),则退化为欧氏距离。若变量尺度不同或存在相关性, S-1会“修正”这些影响。
在这里插入图片描述
马氏距离里对“尺度差异”的修正,和标准化(比如Z-score标准化)的思路很像,都是为了消除变量单位和数值范围不同带来的影响。
不过马氏距离更进一步:标准化只能处理尺度差异,而马氏距离通过 \mathbf{S}^{-1} 还能同时消除变量间的相关性(比如身高和体重的正相关),这是它比“先标准化再算欧氏距离”更全面的地方。

应用场景

异常检测:识别多维数据中的离群点(如工业传感器数据)。
分类:如二次判别分析(QDA)中,用马氏距离衡量样本到各类的分布差异。
聚类:K-means++初始化时用马氏距离避免“维度灾难”。

皮尔逊相关系数

皮尔逊相关系数(Pearson Correlation Coefficient)是一种用于衡量两个变量之间线性相关程度的统计指标,通常用符号 r 表示。

数学定义

皮尔逊相关系数( r )的数学表达式如下:
对于两个变量 X 和 Y ,其样本皮尔逊相关系数为:
在这里插入图片描述

核心特点

取值范围:介于 -1 到 1 之间。
​r = 1:完全正相关(一个变量随另一个变量同步递增)。​
r = -1:完全负相关(一个变量随另一个变量同步递减)。​
r = 0:无线性相关(但可能存在非线性关系)。​
适用条件:​
两个变量需为连续型数据(如身高、温度等)。​
变量间关系近似线性。​
数据大致符合正态分布。

应用场景

用于衡量两个连续变量之间的线性相关程度,其应用场景广泛,核心是判断变量间是否存在线性关联及关联强度。

余弦相似度

余弦相似度(cosine similarity)是一种衡量两个向量方向相近程度的无量纲指标。它把向量想象成从原点出发的箭头,只关心夹角,不关心长度,因此特别适合那些“频率”“权重”会被整体放缩的场景,比如文本、推荐系统或深度学习中的高维表征。

数学定义

给定两个非零向量 A、B,其余弦相似度定义为
cos(θ)= (A·B) / (‖A‖‖B‖) = Σᵢ AᵢBᵢ / √(ΣᵢAᵢ²) √(ΣᵢBᵢ²)
结果落在 [-1, 1]:
1 表示方向完全一致;
0 表示正交、无相关性;
-1 表示方向完全相反。

应用场景

文本:把文档变成 TF-IDF 或嵌入向量,用余弦相似度做检索、聚类、去重。
推荐:用户或物品的 embedding 向量,计算“兴趣接近度”。
深度学习:对比学习(如 SimCLR)用余弦相似度拉近正样本、推远负样本。
图像/音频:特征向量归一化后,用余弦距离(1-相似度)做匹配。

汉明距离

汉明距离(Hamming distance)是一种衡量两个等长字符串(或更一般的,两个等长符号序列)差异的度量方式。
它定义为:在相同位置上符号不同的总个数。

数学定义

对于两个向量 x, y in Sigman( Sigma 是符号集合),汉明距离为:
在这里插入图片描述

其中 I 是指示函数,条件成立时取1,否则取0。

应用场景

纠错码:如海明码(Hamming code)利用汉明距离检测并纠正单个比特错误。
信息检索:快速比对指纹、哈希值或二进制特征向量。
生物信息学:比较基因序列的相似性。
机器学习:用于分类任务中的k-NN算法(如文本分类中的词袋模型)。

KL散度

KL 散度(Kullback-Leibler divergence,记作 KL(P‖Q))是信息论里用来衡量“两个概率分布 P 与 Q 的差异”的一种非对称度量。它不是数学意义上的距离,而是一种“信息损失”或“惊讶度差”的量化方式——用来实现描述分布的差异

直观含义

把 P 当成真实分布、Q 当成近似分布。从 P 里采样一个事件 x,用 Q 去描述它时需要的“额外比特数”就是 log( P(x)/Q(x) )。对所有 x 取期望,就得到 KL(P‖Q)。
若 Q 与 P 完全一致,额外比特数为 0;
若 Q 在某些 P 高频的区域概率过低,KL 会很大。

数学定义

离散形式

KL(P‖Q)=∑ₓ P(x) log( P(x)/Q(x) )

连续形式

KL(P‖Q)=∫ p(x) log( p(x)/q(x) ) dx
约定:0 log(0/q)=0,p log(p/0)=+∞(Q 的支撑集必须覆盖 P 的支撑集)。
KL(P‖Q) ≠ KL(Q‖P),因此不对称,也不满足三角不等式。

应用场景

变分推断:ELBO 中的 −KL(q‖p) 项,迫使变分分布 q 靠近先验 p;
生成模型:VAE 用 KL(q(z|x)‖p(z)) 做正则;策略优化:RL 里的 TRPO、PPO 用 KL 约束策略更新幅度;
领域自适应:最小化源域与目标域特征分布的 KL;
特征选择 / 聚类:衡量变量分布变化,筛选信息量大的特征。

海林格距离

海林格距离(Hellinger distance)是用来衡量两个概率分布之间“差异”的一种度量,它介于 0 和 1 之间,越接近 0 表示两个分布越相似,越接近 1 表示差异越大。

数学定义

对两个概率密度函数(或概率质量函数)p 与 q,海林格距离定义为:
在这里插入图片描述
离散情形把积分换成求和即可。
更常用的是平方形式
在这里插入图片描述

特点

对概率密度开平方,让差异更“温和”(避免极端值主导)。
1/sqrt(2) 和外面的根号:是为了让距离满足数学上“距离”的性质(比如非负、对称、三角不等式),相当于标准化系数。
最后一项称为 Bhattacharyya 系数,介于 0 与 1。

应用场景

非参数贝叶斯:在 Dirichlet 过程、Pitman–Yor 过程等模型中,Hellinger 距离常被用来度量后验收缩速度。
鲁棒统计:相比 KL 散度,它对模型误设更稳健。
生成模型评估:作为 GAN 或 VAE 中真实分布与生成分布的差异度量之一。
聚类与分类:在概率分布空间上定义“样本”之间的距离,再使用 k-means、核方法等。

编辑距离

编辑距离(Edit Distance)是衡量两个字符串之间“差异度”的一种量化指标,也叫 Levenshtein Distance(列文斯坦距离)。它定义为:将一个字符串转换成另一个字符串所需的最少“编辑操作”次数。

允许的编辑操作

  1. 插入(Insertion):在任意位置插入一个字符。
  2. 删除(Deletion):删除任意一个字符。
  3. 替换(Substitution):将任意一个字符替换成另一个字符。

例子

比较字符串
kitten 和 sitting:kitten → sitten (k → s,替换)
sitten → sittin (e → i,替换)
sittin → sitting (末尾插入 g,插入)共 3 次操作
因此它们的编辑距离为 3。

计算方式

编辑距离通常用 动态规划 计算。设 dp[i][j] 表示字符串 a[0…i-1] 与 b[0…j-1] 的编辑距离,状态转移方程为:

if a[i-1] == b[j-1]:dp[i][j] = dp[i-1][j-1]                # 字符相同,无需操作
else:dp[i][j] = 1 + min(dp[i-1][j],    # 删除 a[i-1]dp[i][j-1],    # 插入 b[j-1]dp[i-1][j-1]   # 替换 a[i-1] 为 b[j-1])

应用场景

拼写纠错(如搜索引擎的“您是不是想找…”)
DNA 序列比对(生物信息学)
版本控制系统(如 Git 的 diff 算法)
语音识别(匹配声学模型输出与词典词条)

http://www.dtcms.com/a/288633.html

相关文章:

  • 「Java案例」利用方法求反素数
  • Facebook 开源多季节性时间序列数据预测工具:Prophet 饱和预测 Saturating Forecasts
  • dynamic_cast的实现原理
  • Beamer-LaTeX学习(教程批注版)【6】
  • Elasticsearch 简化指南:GCP Google Compute Engine
  • GPT-4o mini TTS:领先的文本转语音技术
  • 随着GPT-5测试中泄露OpenAI 预计将很快发布 揭秘GPT-5冲击波:OpenAI如何颠覆AI战场,碾压谷歌和Claude?
  • prometheus 黑盒监控和docker检测
  • mysql第三次作业
  • 学习寄存器——GPIO(二)学习BSRR BRR ODR寄存器的原子性和在HAL库的应用
  • 【Go语言-Day 22】解耦与多态的基石:深入理解 Go 接口 (Interface) 的核心概念
  • 【详细笔记】两类曲线积分转换
  • 群组功能实现指南:从数据库设计到前后端交互,上班第二周
  • 【数据结构】揭秘二叉树与堆--用C语言实现堆
  • 人工智能之数学基础:随机实验、样本空间、随机事件
  • Docker Desktop 入门教程(Windows macOS)
  • 深度学习图像分类数据集—百种病虫害分类
  • Python绘图小工具开发:从零构建数据可视化利器
  • 股票及金融笔记
  • 如何升级Docker部署的Dify
  • Materials Studio学习笔记(二十九)——尿素的几何优化
  • 私有云新势力:Puter+CPolar如何低成本替代商业网盘?
  • 【Linux性能优化】常用工具和实战指令
  • 小架构step系列20:请求和响应的扩展点
  • 制作mac 系统U盘
  • macOs上交叉编译ffmpeg及安装ffmpeg工具
  • pages.json页面路由中,globalStyle的各个属性
  • RPG62.制作敌人攻击波数二:攻击ui
  • 分布式文件系统04-DataNode海量数据分布式高可靠存储
  • 【LeetCode数据结构】单链表的应用——环形链表问题详解