文章目录
- 一,数学概念中的距离
- [二,机器学习中的 "距离 metrics" 与数学中 "距离(度量)" 的区别](#二,机器学习中的 “距离 metrics” 与数学中 “距离(度量)” 的区别)
-
- [1. 概念范畴:数学是 "标准",机器学习是 "应用延伸"](#1. 概念范畴:数学是 “标准”,机器学习是 “应用延伸”)
- [2. 核心差异:是否严格遵循度量公理](#2. 核心差异:是否严格遵循度量公理)
- [3. 符合与不符合度量的距离举例](#3. 符合与不符合度量的距离举例)
-
- [1. 符合数学度量的距离(满足 3 个核心条件)](#1. 符合数学度量的距离(满足 3 个核心条件))
- [2. 不符合数学度量的"伪距离"](#2. 不符合数学度量的“伪距离”)
- 三,机器学习中常的距离函数
-
- 1,范数距离:适用于数值型数据(numerical)
-
- (1)欧几里得几何距离
- (2)其他范数距离
- (3)闵式距离应用拓展的一些思考
-
- 1️⃣未利用数据的"统计信息"修正维度权重
-
- [1)忽略 "方差差异":让 "数值尺度" 主导距离,而非 "统计显著性"](#1)忽略 “方差差异”:让 “数值尺度” 主导距离,而非 “统计显著性”)
- 2)忽略"维度相关性":将相关维度视为独立,导致距离"重复计算差异"
- 2️⃣注意p≥1与p<1的情况
- 3️⃣对高维数据"维度灾难"敏感:需降维或改用稀疏距离
- 四,线性代数中的复杂距离度量
-
- 2,概率分布之间的距离:distribution
-
- 离散分布
-
- (1)向量内积:频数分布向量
-
- 1️⃣余弦距离(1-余弦相似性)
- [2️⃣皮尔逊相关系数(Pearson correlation):](#2️⃣皮尔逊相关系数(Pearson correlation):)
- 3️⃣Tanimoto系数
- (2)两个集合之间的相似性
-
- [1️⃣Jaccard index/Tanimoto similarity](#1️⃣Jaccard index/Tanimoto similarity)
- [2️⃣Tanimoto similarity](#2️⃣Tanimoto similarity)
- 3️⃣简单匹配系数
- (3)假设检验统计量分布
- (4)KL散度/相对熵
- 1)KL散度(相对熵)
- 连续分布
-
- [(1)KL散度/相对熵(Kullback--Leibler divergence)](#(1)KL散度/相对熵(Kullback–Leibler divergence))
- [(2)JS散度(Jensen--Shannon divergence)](#(2)JS散度(Jensen–Shannon divergence))
- [(3)交叉熵(cross entropy)](#(3)交叉熵(cross entropy))
- (4)对熵的总结:从信息论的角度(也就是平均信息量,编码这些信息所需要的字节数,编码序列长度)
- 3,序列之间的距离
-
- (1)比较等长序列
-
- [1️⃣汉明距离(Hamming distance):度量两个长度相同的字符串之间的相似度](#1️⃣汉明距离(Hamming distance):度量两个长度相同的字符串之间的相似度)
- [2️⃣Jaccard index衍生距离:参考上文"集合之间的距离"部分,也适用于下文非等长序列的扩展](#2️⃣Jaccard index衍生距离:参考上文“集合之间的距离”部分,也适用于下文非等长序列的扩展)
- 3️⃣分类数据点间的距离
- (2)比较非等长序列
-
- [1️⃣编辑距离:Levenshtein distance](#1️⃣编辑距离:Levenshtein distance)
- (3)时间序列分析
-
-
- [动态时间规整(Dynamic Time Warping,DTW)](#动态时间规整(Dynamic Time Warping,DTW))
-
- 参考:
一,数学概念中的距离
某种函数:用于描述集合中两个元素之间的远近

两个概念:距离vs度量
其实从英文单词上就很容易看出两个概念的区别:distance vs metric

距离用于描述集合中两个元素之间的远近,而度量是我们严格意义上所讨论的距离,度量就是1个在度量空间中测量两点之间距离的函数,满足3个条件的距离是度量:

度量是满足3条件的距离,度量一定满足3条件,距离不一定满足3条件(度量是特殊的距离函数)。
有度量概念的集合,称之为度量空间。
也就是对于一个集合,我们有衡量集合中元素之间远近的某种函数(也就是距离),如果这个距离满足上面的3个条件:非负性+对称性+三角不等式,那么这个距离就是一个度量,有了度量这个概念的集合,就是度量空间。

当然,对于第一条条件,其实可以稍微深挖一下,

这其实是非负性与同一性/反身性、自反性的混合表述,其中当且仅当两个元素为同一个元素时其距离为0是反身性。
严格意义上来讲,非负性是可以由反身性+对称性+三角不等式推导出来的,

证明构造过程如下:
首先依据同一性:有0=d(x,x)
然后对于三角不等式:对任意x、y、z,有d(x,z)≤d(x,y)+d(y,z),以为要联系同一性,所以令z=x,
有d(x,x)≤d(x,y)+d(y,x)
对于上面变体的右边,依据对称性:0=d(x,x)≤d(x,y)+d(y,x)=2d(x,y)
------》推得非负性d(x,y)≥0
度量空间:一种具有度量/"距离"函数的集合



1,两点间的距离(欧几里得距离)

2,推广至更高维对象
两个对象间的欧几里得距离亦可推广至两个对象不再是个点,而是更高维之流形(如曲线)的情形,所以除了谈论两点间的距离外,亦可讨论两条线间的距离之类的概念。
(1)集合间及一点与一集合间之距离

| 概念 | 符号 | 核心含义 | 示例(集合**** S =( 2**,**** 4****]****)** |
|---|---|---|---|
| 上确界(supremum) | supS | 最小上界(≥所有元素) | supS=4 |
| 下确界(infimum) | infS | 最大下界(≤所有元素) | infS=2 |

豪斯多夫距离的核心逻辑是双向取极值:
先找单个集合内点到另一集合的 "最近距离下限",再找所有下限中的 "最远距离上限",最后取双向结果的最大值,以此精准衡量两个集合的整体 "贴近程度"。
(2)点线面间的距离公式:
在点、直线与平面之间的距离多采上述的第一种定义,也就是两个非空集合内22点对之间距离的min(下确界inf)。
从解析几何角度来考量,也就是在中学的笛卡尔坐标系下,我们能够轻而易举地写出这些距离对应的公式:


异面直线 :在三维空间中,两条既不平行也不相交的直线被称为异面直线。它们不在同一个平面上,因此无法通过简单的平面几何方法来确定它们之间的距离。
给出的两个参数方程形式,
直线1:其中 (x_1, y_1, z_1) 是直线上的一个已知点,(L_1, M_1, N_1) 是直线的方向向量。参数方程表示了直线上任意一点 (x, y, z) 与已知点 (x_1, y_1, z_1) 之间的关系;
直线2:其中 (x_2, y_2, z_2) 是第二条直线上的一个已知点,(L_2, M_2, N_2) 是第二条直线的方向向量。
公式是简单的线性代数(需要理解一点点几何意义),
我一般用下面正方体中红线所标注的两条边作为例子(两个向量的起点,也就是正方体的两个顶点,作为参数方程中的已知点),来简化理解这个公式:主要是理解其中的分子分母

- 分子部分 :
- 分子是一个三阶行列式的绝对值,表示向量 (x_2 - x_1, y_2 - y_1, z_2 - z_1) 与方向向量 (L_1, M_1, N_1) 和 (L_2, M_2, N_2)的混合积。这个混合积的绝对值表示了由这三个向量构成的平行六面体的体积,而这个体积与两条异面直线之间的距离有关。
- 分母部分 :
- 分母是三个二阶行列式的平方和的平方根。这些二阶行列式分别表示方向向量 (L_1, M_1, N_1) 和 ((L_2, M_2, N_2) 之间的叉积的各分量。实际上就是两条异面直线的方向向量的叉积的模长,等价于由两个方向向量构成的平行四边形的面积。

3,广义距离泛函

上面都是讲数学中的距离,也就是距离概念的数学来源(也就是距离的"标准"),
下面我们来讲一下机器学习中常使用到的一些距离metrics,比如说聚类或者是分类,也就是机器学习"应用延伸"中的距离概念。

二,机器学习中的 "距离 metrics" 与数学中 "距离(度量)" 的区别
1. 概念范畴:数学是 "标准",机器学习是 "应用延伸"
- 数学中的距离(度量):严格遵循上述 3 个核心条件,是抽象的集合论概念,仅关注 "是否满足度量公理",不绑定具体应用场景(如欧几里得距离、曼哈顿距离在数学中均为合法度量);
- 机器学习中的 "距离 metrics" :本质是对数学度量的 "应用化借用",但存在两类情况:
- 一类是完全符合数学度量的距离(如欧几里得距离、曼哈顿距离),用于聚类(如 K-Means)、分类(如 K-NN)中衡量样本相似性;
- 另一类是不满足数学度量条件,但在特定任务中有用的 "伪距离"(如余弦相似度的衍生距离、KL 散度)------ 这类指标虽被称为 "距离",但不符合三角不等式或对称性,仅用于刻画 "差异程度",而非严格的数学度量。
2. 核心差异:是否严格遵循度量公理
数学中的 "距离" 必须满足全部 3 个公理,缺一不可;
而机器学习中的 "距离 metrics" 更侧重 "实用性",只要能有效刻画样本差异,即使不满足部分公理,也可能被使用(如 KL 散度不满足对称性,仍用于衡量概率分布差异)。
3. 符合与不符合度量的距离举例
1. 符合数学度量的距离(满足 3 个核心条件)
- 欧几里得距离(2 - 范数距离):数学中经典的度量,满足非负性、对称性和三角不等式,是平面 / 空间中两点间 "直线距离" 的推广,机器学习中常用于连续特征的相似性计算;
- 曼哈顿距离(1 - 范数距离):定义为两点坐标差的绝对值之和,符合全部度量公理,机器学习中适用于高维数据或需凸显 "轴方向差异" 的场景(如推荐系统中用户行为的差异衡量);
- 切比雪夫距离(无限范数距离):定义为两点坐标差的最大值,满足度量公理,在棋盘路径规划、多维度最大偏差衡量中常用;
- 豪斯多夫距离 :当作用于度量空间的非空紧致子集时,满足非负性(仅两集合重合时距离为 0)、对称性(d__H (X ,Y )=d__H (Y ,X))和三角不等式,因此构成该紧致子集上的度量,可用于机器学习中图像轮廓、点云集合的相似性对比。
2. 不符合数学度量的"伪距离"
- KL 散度(相对熵) :用于衡量两个概率分布的差异,不满足对称性(KL (P ∣∣Q ) != KL (Q ∣∣P)),且不满足三角不等式,因此不是数学意义上的度量;
- 余弦距离(基于余弦相似度) :余弦相似度衡量向量方向的一致性,其衍生的 "余弦距离"(1-余弦相似度,余弦相似度就是向量夹角的余弦值)虽满足非负性,但当向量模长不同时,可能不满足三角不等式(如向量a =(1,0)、b =(0,1)、c=(1,1),余弦距离不满足三角不等式,简单计算就是需要1≤2-√2,实际上是不满足的);
- 两个非空集合的 "下确界距离" :数学中定义为 "两集合内点距离的下确界",虽满足非负性和对称性,但不满足三角不等式(如集合A ={0}、B ={1}、C ={2},该距离下d (A ,C )=2,而d (A ,B )+d (B ,C)=1+1=2,看似满足,但对重叠集合会出现 "距离为 0 却非同一集合" 的情况,且存在不满足三角不等式的特例),因此不是合法度量。
所以严格意义上来讲,机器学习中用到很多距离(度量概念)其实是伪度量,也就是说不是严谨的度量概念,是推广度量(也就是放宽了度量公理的方法,给出较度量空间更为广义的不同概念)。


具体参考:https://zh.wikipedia.org/wiki/距离函数,相应维基页面中的"推广度量"部分。
三,机器学习中常的距离函数
以机器学习中常见的聚类、分类为例,我们常用的各种distance metrics,实际上是相似性(similarity)概念的数量化。
相似性程度用数值来表示,该数值称为相似性系数(similarity coefficient),
类似但本质相同的概念有很多,比如说距离系数、距离函数、相异/相亲系数等,依据具体任务以及使用场景而定。
简而言之,机器学习应用中所指代的距离,一般可以认为是前面数学概念中提到的相似度度量 ,严谨点说,是更广义的相似度推广度量(因为有些不一定满足度量公理)
以1个简单的分类task为例,同时回顾一下前面的度量概念:











还有很多的例子可以举,这里就不报菜名了。
再次强调,通常我们是基于某种形式的距离来定义"相似度度量",距离越大,相似度越小。
然而,用于相似度度量的距离未必一定要满足距离度量的所有基本性质,尤其是三角不等式。
所以,我们通常在机器学习中学到的、或者是自己定义的,一般是推广度量=度量距离(3满足)+非度量距离(不一定全满足),两者都有。
更广义,比如说loss function,损失函数?
1,范数距离:适用于数值型数据(numerical)
常用的范数距离为1范数(曼达顿距离)、2范数(欧几里得几何距离)、无限(大)范数(切比雪夫距离),其余范数很少用。
一般统一的p范数距离,就是指代Minkowski Distance(闵式距离),所以我们提到范数距离,一般就是闵式距离。下面以闵式距离进行指代
(1)欧几里得几何距离
本质上就是欧式空间中的L2范数(2范数)

(2)其他范数距离
2范数距离也就是欧几里得几何距离是比较常见的,我们可以推广到p阶(分量差的绝对值的p次方,求和之后开p次方根)。
统一的p范数距离,就是指代Minkowski Distance(闵式距离)




最后一个无限范数距离其实本质上就是切比雪夫距离:可以由极限证明



注意 :若p <1(如p =0.5),闵式距离将不再满足三角不等式,此时它不再是数学意义上的度量,仅能作为 "伪距离" 使用(但实际应用中p<1的场景极少,因缺乏直观几何意义且不满足度量公理)。
举个例子:当 p < 1, (0,0) 到 (1,1) 的距离等于 (1+1)^{1/p} > 2, 而 (0,1) 到这两个点的距离都是 1。
(3)闵式距离应用拓展的一些思考
总的来说,闵式距离是一类极具通用性的距离家族,它通过1个参数p(p≥1)统一了欧几里得距离、曼哈顿距离等经典距离,同时严格遵循数学中度量的3个核心条件。
1️⃣未利用数据的"统计信息"修正维度权重
从公式上看,闵式距离比较直观,但是它与数据的分布无关,具有一定的局限性,如果x方向的幅值(坐标差)远远大于y方向的值,这个距离公式就会放大x维度的作用。
往深处说,就是闵式距离的"直观性"源于其对数据维度的 "无差别对待"------ 仅基于坐标差的线性或幂次运算衡量差异,却完全忽略数据本身的统计分布特性(如均值、方差、维度相关性)。这种 "无差别性" 在数据分布不均、维度相关或高维场景下,会直接导致距离计算的 "失真",进而影响机器学习模型的决策逻辑。
从统计角度来看,闵式距离其实是违背"数据分布特性"的距离计算,其核心局限是未利用数据的 "统计信息" 修正维度权重,导致距离无法反映 "数据的真实差异程度"(注意我说的是差异程度,是程度,也就是相对概念,因为差异大小,绝对概念其实往往不是我们关注的,尤其是有很多维度数据时)。
1)忽略 "方差差异":让 "数值尺度" 主导距离,而非 "统计显著性"
从数学角度上来讲,参数p的取值决定了距离的"计算侧重":
p越小,距离越侧重坐标差的"绝对值贡献";p越大,距离越侧重坐标差的"最大贡献项",从某种角度上来讲,这一特性使其能适配不同场景下的差异衡量需求。
但是我们可以看到,调整p(相当于是调超参数选模型,但本身没有对数据进行改动),其实逻辑上都是一样的,直接基于特征的"原始数值差"计算,但 "数值差的大小" 不等于 "统计意义上的差异大小"------ 当不同维度的方差(数据离散程度)差异显著时,方差大的维度会 "过度主导" 距离计算,而方差小的维度的真实差异会被掩盖。
举个统计场景的例子:
假设我们要衡量两个样本的 "人体特征差异",特征包括身高(x 维度,单位:cm,均值 170,方差 100) 和脉搏(y 维度,单位:次 / 分钟,均值 70,方差 4) 。

从数值上看,身高差(5cm)的平方贡献了 25,脉搏差(2 次 / 分)的平方贡献了 4,身高维度的权重是脉搏的 6.25 倍。但从统计视角看:
- 身高差 5cm:相对于方差 100(标准差 10),其 "标准化差异" 为5/10=0.5(即偏离均值 0.5 个标准差,属于中等差异);
- 脉搏差 2 次 / 分:相对于方差 4(标准差 2),其 "标准化差异" 为2/2=1(即偏离均值 1 个标准差,属于较大差异)。
显然,闵可夫斯基距离仅关注 "原始数值差",误将 "统计上不显著的身高差异" 放大为距离的主导项,而 "统计上更显著的脉搏差异" 被弱化 ------ 这违背了统计分析中 "基于数据离散程度衡量差异显著性" 的核心逻辑,导致距离无法反映样本的 "真实统计差异"。
如何矫正维度间的尺度差异问题?方法很简单,很多人都能够想到,就是用统一的标准、尺度矫正每个维度内数据,比如说简单的标准化(Z-transform),而** Z****-transform(标准化)的本质,正是通过 "减去均值、除以标准差",将各维度的 "原始数值差" 转化为 "标准化差异(Z-score)",让每个维度的距离贡献基于 "统计显著性" 而非 "原始尺度",本质是对闵可夫斯基距离的 "统计修正"。当然,也可以使用其他的归一化手段。**

总的来说,就是闵式距离依赖特征的原始数值范围,对特征尺度敏感,需先标准化/归一化。
一般都是建议,先对特征做标准化(Z-Score,使均值为0、方差为1)或归一化(Min-Max,缩放到[0,1]区间),消除尺度差异后再计算闵式距离。
2)忽略"维度相关性":将相关维度视为独立,导致距离"重复计算差异"
闵可夫斯基距离的另一个统计缺陷是假设所有维度相互独立,但现实数据中,维度间往往存在显著相关性(如身高与体重、房屋面积与价格、广告投入与销售额)。再举一个简单的例子,比如说氨基酸序列分析,比如说频率分析,一般是20维,但是我们知道在频率上,这些氨基酸字符之间是有相关性的,一个氨基酸字符频率高了,就意味其他所有字符的整体频率降低,频数数据还好一点。
当维度相关时,闵可夫斯基距离会对 "重叠的差异信息" 进行重复计算,导致距离被高估或低估,无法反映样本的 "独立差异"。
从统计原理看:
若两个维度 x 和 y 存在正相关(如身高 x 与体重 y,相关系数ρ>0),则 x 的增大往往伴随 y 的增大 ------ 样本在 x 维度的差异,本质上已部分包含了 y 维度的差异。但闵可夫斯基距离会分别计算 x 和 y 的维度差并累加(如曼哈顿距离的∣x1−x2∣+∣y1−y2∣),相当于将 "重叠的差异信息" 计算了两次,导致距离被 "虚高"。
例如:
假设身高(x,均值 170,标准差 10)与体重(y,均值 65,标准差 5)的相关系数ρ=0.8(强正相关),样本 A:(170, 65)(均值点),样本 B:(180, 70)。
- 原始欧几里得距离:(180−170)2+(70−65)2=100+25=125≈11.18
- 但从统计相关性看:样本 B 的身高比均值高 1 个标准差(10cm),由于ρ=0.8,体重比均值高0.8个标准差(4kg),而实际体重仅高 5kg(1 个标准差)------ 额外的 1kg 体重差异是 "独立于身高的真实差异"。但闵可夫斯基距离未剥离这种相关性,将 "身高关联的 4kg 差异" 与 "独立的 1kg 差异" 合并计算,导致距离包含了 "重复的相关信息",无法反映样本的 "净差异"。
2️⃣注意p≥1与p<1的情况
主要是三角不等式是否满足,也就是p能够决定这个闵式距离是度量距离还是非度量距离;
3️⃣对高维数据"维度灾难"敏感:需降维或改用稀疏距离
当特征维度(n)极大(如n=10000的文本特征)时,闵式距离(尤其是L2)会出现"所有样本的距离都趋于相等"的问题------即"维度灾难",导致一些距离依赖的聚类/分类模型(如K-NN)无法区分样本差异。
可以按照如下方式:
- 先通过PCA、t-SNE等方法降维,减少特征维度后再计算闵式距离;
- 对稀疏数据(如文本),改用"加权闵式距离"(如对高频词特征赋予低权重,降低冗余特征的影响)。
四,线性代数中的复杂距离度量
(1)马氏距离(Mahalanobis distance,马哈拉诺比斯距离)
前面我们提到,闵式距离在数值计算上的尺度误差可以通过标准化进行矫正,但是相关性的误差无法进行简单的矫正(可以在feature选择步骤上,手动过滤掉一些强相关、冗余的数据)。
如果维度相关之间数据相关,就需要选用其他的距离度量函数,比如说马哈拉诺比斯距离,也就是Mahalanobis distance(马氏距离)。
也就是说,马氏距离同时考虑了feature之间的相关性与尺度信息。

2,概率分布之间的距离:distribution
前面讨论的都是两个数值点之间的距离,实际上两个概率分布之间的距离是可以测量的。
这里的"距离"如何理解呢?两个样本分布,是否来自于同一个总体,或者是否满足同一种分布,只要有相同(identical)的概念,就会有远近的相对,那么就会有距离的概念。
离散分布
对于离散分布,数据通常以频数或概率的形式表示,可以表示成集合以及各种衍生的数据载体(或者说数据结构),比如说是向量、序列等。
其实要区别离散分布载体的不同结构形式,核心是先明确离散分布的载体形式差异(即"数据如何组织信息"),再基于"信息维度"(元素是否有序、是否可重复、是否带权重)。
我们先粗浅地看一下离散分布的载体形式的差异,简单地理解为数据结构(如何组织信息),个人观点,仅供参考。
离散分布的核心是"对离散元素的存在/频率/关联 信息的刻画",不同数据结构的本质差异在于是否保留"顺序""重复(频率)""权重(关联)"这三类关键信息。
| 载体类型 | 核心信息维度 | 元素特性(有序性/可重复性/权重) | 典型实例 | 对应离散分布场景 |
|---|---|---|---|---|
| 1. 无结构载体 | 仅"元素存在性"或"全局频率" | 无序、无重复(或重复被合并为频率)、可带权重(频率) | 集合、频率向量 | 仅关注"哪些元素出现""出现多少次",不关注顺序(如文档关键词集合、物种基因位点集合、一条氨基酸序列的20维频率向量) |
| 2. 有序载体 | 元素存在性+顺序关联 | 有序、可重复、可带权重(频率/位置权重) | 序列(字符串、时间序列) | 关注"元素出现的先后顺序"(如DNA序列的碱基排列、文本的字符/词顺序) |
| 3. 结构化载体 | "元素存在性+顺序+层级/关联" | 有序、可重复、带权重+层级关系 | 树(进化树)、图(基因调控网络) | 关注元素间的层级或复杂关联(如进化树的分支顺序、基因间的调控关系) |
简单来说,我个人的粗浅观点是认为离散分布主要有两种载体形式:序列和集合。
在离散分布的背景下,序列和集合的本质是信息保留程度不同的两种载体:
| 对比维度 | 集合(Set) | 序列(Sequence) | 关键结论 |
|---|---|---|---|
| 1. 顺序性 | 无序(元素排列顺序不影响载体本质) | 有序(元素顺序直接决定载体本质) | 集合丢失"顺序信息",序列保留"顺序信息"------这是最核心区别(如{1,2}≠{2,1}?不,集合中{1,2}={2,1},但序列[1,2]≠[2,1]) |
| 2. 可重复性 | 无重复(元素唯一,重复元素被合并) | 可重复(元素可多次出现,且重复有意义) | 集合丢失"重复信息",序列保留"重复信息"(如集合{1,1,2}={1,2},但序列[1,1,2]≠[1,2]) |
| 3. 信息粒度 | 粗粒度Coarse-graining(仅刻画"元素是否存在/总频率") | 细粒度Fine-graining(刻画"元素的位置、顺序关联") | 集合是"降维后的信息载体"(将序列的顺序/重复信息压缩),序列是"升维后的信息载体"(保留更细的位置关联) |
至于向量,只是序列和集合的一种量化工具(在实际计算编码方面)。
向量(Vector)并非"特殊的集合"或"特殊的序列",而是将离散载体的信息量化为(维度-值)结构的通用工具------它可以适配集合、序列结构的信息,将其转化为可计算的数值形式,方便后续距离度量。
| 原始载体 | 向量的转化方式 | 转化后向量的意义 | 对应距离度量实例 |
|---|---|---|---|
| 集合 | 构建"元素-存在/频率"向量(维度=所有可能元素,值=0/1或频率) | 向量的每个维度对应"某元素是否存在/出现次数" | Jaccard指数(基于存在性)、余弦相似度(基于频率向量) |
| 序列 | 构建"位置-元素值"向量(维度=序列长度,值=对应位置的元素)或"元素-位置频率"向量 | 向量的每个维度对应"某位置的元素"或"某元素在某位置的出现次数" | 编辑距离(基于位置向量的操作成本)、动态时间规整(DTW,基于时序向量的对齐) |
所以如何刻画两个离散分布,就是你想要用什么结构去保留这个分布的什么信息,
还是集合和序列,我随便举个信息比对的例子:
| 离散分布载体类型 | 核心信息需求 | 适配的距离度量 | 不适配的度量 |
|---|---|---|---|
| 集合(无顺序/无重复) | 衡量"元素重叠程度"或"频率相似性" | 1. Jaccard指数(存在性); 2. 余弦相似度(频率向量); 3. 曼哈顿距离(频率向量),其实闵式距离都可以 | 编辑距离(集合无序,无需"插入/删除"操作) |
| 序列(有顺序/可重复) | 衡量"顺序对齐程度"或"位置关联相似性" | 1. 编辑距离(Levenshtein,基于字符操作); 2. Smith-Waterman(局部对齐得分); 3. DTW(时序序列对齐) | Jaccard指数(丢失顺序信息,无法刻画序列的位置关联) |
从离散分布的信息逻辑来看,序列和集合是两种信息保留逻辑相反的形式:
- 信息保留方向相反:集合是"压缩信息"(丢弃顺序、合并重复),序列是"保留信息"(保留顺序、保留重复)------二者是"信息粒度不同的平行载体",而非"从属关系";
- 距离度量逻辑不同:集合的度量基于"元素重叠度",序列的度量基于"顺序对齐度"------若强行将序列视为集合,会丢失"顺序"这一核心信息(如DNA序列的"ATCG"和"GCTA"作为集合是相同的,但作为序列完全不同,对应的生物学意义天差地别)。
所以下文罗列的分布距离度量方式,都是按照我上面本人的理解逻辑进行整理的,个人观点,仅供参考。
其中向量不是关键,向量只是量化数据结构的一种工具,因为离散分布任意哪些维度信息以组合方式保留下来,都能够以向量的形式存储(这里的向量,指的就是实现时的数组)。
总之,我的认知逻辑就是:集合、序列是"信息维度不同的离散载体",向量是"量化这些载体的工具",距离度量需要"匹配载体的核心信息维度"(至于保留什么信息维度就看我们想要研究的问题了)。
应用场景的话,举一个例子,在分类问题中,预测结果和真实标签可以表示为one-hot编码的向量(概率向量),然后向量之间就有距离,就可以定义loss,比如说交叉熵,那就可以将交叉熵作为目标函数。

(1)向量内积:频数分布向量
适用于分类数据,频数分布可以表示为向量(向量距离,非严格分布距离)。
这一块侧重的点在于:分类数据,其频数分布可以表示为向量,向量之间的相似性可以用这些方法衡量,但它们并不是严格意义上的概率分布之间的距离,它们更多地关注向量的方向或线性关系。
向量内积就不提了,线性代数里最常见的计算:


如何直观上来理解其测量相似性的原理呢?
简单来说,如果x高的地方y也比较高,x低的地方y也比较低,那么整体的内积是偏大的,也就是说x和y是相似的;但是反过来,如果x高的地方y比较低,x低的地方y比较高,那么整体的内积就会偏小,也就是说x和y是差异的。
当然,这个简单的例子,其实和数据变化的趋势有关,很自然地就能够联想到相关系数,比如说如果x高的地方y也比较高,x低的地方y也比较低,我们一般认为x和y是相关的,会用相关系数去描述这种一致的数据变化趋势(其实这里就能够看出来余弦距离和相关系数是有一定联系的了)。
其实内积作为相似度度量工具的想法,在信号处理场景中很常见:
离散序列匹配:用内积找"最像"的片段
核心逻辑是"信号相似则内积大":
- 长信号A(比如一段音频/传感器数据)和短信号a(比如要找的"关键词音频片段")都是离散值序列(比如每秒采样1000个点,每个点是一个数值)。
- 把a看作"模板",从A的开头开始"滑动":第一次用A的第1N个点(N是a的长度)和a算内积,第二次用A的第2N+1个点和a算内积......直到滑完A的所有可能片段。
- 内积的本质是"对应位置数值相乘再求和":如果A的某段片段和a"趋势一致"(比如a的高值位置,这段A也高;a的低值位置,这段A也低),相乘后求和的结果就会大,说明两者相似度高------这就是通过内积找"最匹配片段"的原理。
频域变换(DFT/DCT):内积实现"信号分解"
核心逻辑是"内积=向标准基投影":
- DFT(离散傅里叶变换)和DCT(离散余弦变换)的本质,是把原始离散信号(比如时域的声音信号),分解成"不同频率的标准信号(正交标准基)"的组合。
- 这里的"分解"靠内积实现:比如DFT的每个"标准基"是不同频率的正弦/余弦波,用原始信号和某个频率的"标准基"算内积,得到的结果就是原始信号中"这个频率成分的强度"------内积越大,说明原始信号里这个频率的占比越高。举个简单的例子,一段音乐信号通过DFT后,和"高频标准基"内积大,说明音乐里高音成分多;和"低频标准基"内积大,说明低音成分多。
连续函数场景:内积延伸到逼近与拟合
核心逻辑是"用内积度量连续函数的相似度,进而实现逼近":
- 当数据是连续函数(比如温度随时间变化的曲线)时,不能直接用离散序列的内积去逼近拟合,需通过"积分"计算连续形式的内积(本质还是对应位置的乘积累积),以此度量两个连续函数的相似度。
- 这种思路的应用场景:
- 多项式逼近连续函数:比如用一个简单的二次多项式(y=ax²+bx+c)去"贴合"复杂的温度曲线,可通过内积找到"和原曲线相似度最高"的多项式系数(a、b、c),我们可以简单理解为二次项、一次项以及常数项就是各种标准基,只是粗略类比;
- 离散样本拟合连续函数(最小二乘问题):比如有一批离散的实验数据点(比如"时间-浓度"数据),要找一条连续曲线穿过这些点附近,本质是通过内积最小化"曲线预测值与实际样本点的误差",得到最优拟合曲线。
当然,我们知道向量内积的结果有多大就有多大,没有界限,不是一个分布在特定范围内的数值。
一种常见的方法就是做内积,也就是除以向量的模长,结果就是余弦相似性。

1️⃣余弦距离(1-余弦相似性)
这里提一嘴余弦相似性:
测量两个向量的夹角的余弦值,检查两个向量是否大致指向相同的方向。
结果与向量长度无关,仅与向量指向方向相关,
如果用在分类频率数据上,就是比较分类维度空间中的两个向量之间的夹角;
一般的频数频率都是正的,在正空间中,余弦相似性正好是0-1。
如果要转化为距离,也就是定义余弦距离=1-余弦相似性


平移不变性:X+C问题
然后对于余弦相似性,其实从公式上就可以看出来,其受到向量的平移影响。
比如说前面的式子,如果将x平移到x+1,余弦值就会变化。
我这里所指的向量平移,是特指数据处理中"对向量的每个维度坐标,同时加上一个常数,或一组固定偏移量",不是指几何中的"向量平移"(几何中的沿向量方向平行移动,与数据场景中的定义不同)。
比如说标准化的时候,对于每一个样本点,每一个feature分量会减去分布的均值,当然是同一feature维度减去统一的常数值,同一个样本点不同维度feature分量之间往往减去不同的常数均值------》这里只是举例x+c这种数据平移的场景。


以二维坐标系为例,比如说上面的这个(2,4)样本点,然后和另外一个样本点(0,4)做内积,那么夹角就是左边绿线和右边蓝线的夹角;
但是如果说我们对(2,4)样本点的第2个维度做z-score,也就是标准化,比如说该维度均值为2,标准差为1,那么就变成了(2,2)和(0,2)做内积,那么夹角就是坐标的红线和右边的绿线,显然夹角余弦值发生了变化。
就算不一定是标准化,比如说是对某个维度的数据做某种变换,
或者只是单纯的因为测量误差,比如说某个维度的数据整体要减去某个固定的值,
或者是比如说进行单位换算,比如说某个维度feature是温度,然后需要在华氏度和摄氏度之间进行转换,
总之数据平移的场景非常常见。
上面举的都是单个维度的数据平移情况,实际处理过程中每个维度的数据都有可能发生平移,那么情况会更加复杂。
如果某一个维度的分量发生了平移,那么:
- 向量在该维度的"位置"改变,导致整体"方向"轻微偏移
- 若平移幅度大,甚至可能让向量从"正相关方向"转向"弱相关方向",直接改变相似度结论
- 简单来说余弦相似性衡量的是原始向量的方向一致性,其计算依赖向量的"绝对数值"所构成的方向(方向其实是由各维度数值的比例关系决定的)。当向量平移时,各个维度的数值比例关系会被打破,方向随之改变,夹角自然变化,余弦相似性也会相应改变
那么如何才能实现平移不变性呢?那就是前面内积概念里一闪而过的相关系数的想法:
2️⃣皮尔逊相关系数(Pearson correlation):

对于这个公式,只需要稍微变换一下:

其实我们可以很容易的发现,两个变量之间的相关系数,其实就是两个变量中心化之后的余弦相似性(皮尔逊相关系数就是把两组数据标准化处理之后的向量夹角的余弦)。
也就是说皮尔逊相关系数=中心化后向量的余弦相似性。

对于X+C型平移问题 ,"中心化" 恰好解决了平移问题 ------无论原始向量如何平移,中心化后的向量都不受影响。
中心化操作消除了向量的平移影响:无论原始向量如何平移(即加上任意常数向量),中心化后的向量保持不变(因为平移会影响均值,但减去均值后偏移被抵消)。因此,皮尔逊相关系数具有平移不变性------对向量进行任何平移操作后,其值不变。
此外,皮尔逊相关系数还具有尺度不变性(即对向量进行缩放不会改变相关系数)
尺度不变性其实我们前面闵式距离中就提到了,这个问题我们可以通过简单的标准化或者是归一化进行矫正,但是闵式距离无法处理相关性问题。而对于余弦相似性,如果要做X+C型的平移变换,就会有平移不变性问题。
总的来说,皮尔逊相关系数具有平移不变性和尺度不变性,计算出了两个向量(维度)的相关性。不过,一般我们在谈论相关系数的时候,将 x 与 y 对应位置的两个数值看作一个样本点,皮尔逊系数用来表示这些样本点分布的相关性。
3️⃣Tanimoto系数

用于计算符号度量或布尔值度量的两个形式向量之间的相似性,主要是集合可以表示为01二进制的位元向量形式,又加上Tanimoto相似性涉及到向量内积作用,所以这里提一下,主要还是用于下面的衡量两个集合之间的相似性。
(2)两个集合之间的相似性
1️⃣Jaccard index/Tanimoto similarity

Jaccard index,实际上就是交并比intersection over union (IoU),用于衡量样本集之间的相似性和多样性。
通常定义为两个大小(面积或体积)的比值,也就是交集大小除以并集大小。
Jaccard index用于衡量有限非空样本集之间的相似性,定义为样本集交集的大小除以并集的大小。



然后相应的从相似性系数出发,可以定义1个距离
也就是Jaccard distance,用于衡量样本集之间的不相似性,与Jaccard index互补,可以通过从1中减去Jaccard index获得,或者等价地,通过将两个集合的并集与交集的大小只差除以并集的大小来获得:

另外一种常用的写法,也就是在位向量(bitvector,01-vector)上的写法如下:


其实这个式子就是后文的Tanimoto相似性,之所以不放在一起,是因为有的资料定义上Jaccard index就是Tanimoto similarity,但是有的资料上后者的定义千变万化,主要还是Tanimoto similarity的定义有很多不一致的地方,但是能够确认一点的是Tanimoto similarity的想法、分析逻辑是来源于Jaccard index。
另外从数学形式上看,这个式子是不是和余弦相似性很像?

------"我们从分母上看,T(A,B)的分母是≥余弦相似性的分母,而且当且仅当A/B长度相等、方向一致时才相等。从某种程度上这意味着,Tanimoto系数考虑了两个向量的长度差异,长度差异越大相似性越小。"
我见到不少本科生,刚开始学的时候都会有这种想法,认为Tanimoto系数是余弦相似性的拓展。尽管能够从形式上区分两者,自认为没有混淆,但是认为Tanimoto系数是余弦相似性的拓展的想法,其实是一种更高级的混淆(仔细品)。
具体来说:
- 混淆核心:代数形式相似
两者易被混淆的直接原因是表面计算公式存在一定相似性 ------均包含向量点积(A·B),且都涉及向量相关的计算项,导致视觉上易被误认。但二者的核心逻辑、分子分母构成及含义完全不同:- 余弦相似性公式: cosθ=\\frac{A·B}{\|A\|×\|B\|} ,核心是通过向量夹角余弦值衡量"方向相似性",与向量长度无关。
- Tanimoto系数公式: T(A,B)=\\frac{A·B}{\|A\|^2+\|B\|^2 - A·B} ,本质是Jaccard系数在向量场景的扩展,核心衡量"集合交集与并集的比例"(位元向量场景中,分子是交集元素数,分母是并集元素数)。
- Tanimoto系数的本质
该系数最初用于位元向量(元素仅0或1,代表"是否存在") 场景,是计算Jaccard系数的特定方法------比如判断两个文档是否包含某类关键词(1=包含,0=不包含)时,Tanimoto系数即"共同包含的关键词数"除以"至少一个文档包含的关键词数"。后来虽扩展到普通向量(如词频向量),但核心逻辑仍围绕"交集与并集的比例",而非向量方向。 - 关键差异:核心目标
- 余弦相似性:目标是衡量两个向量的 "方向一致性"------ 不管向量的 "长度"(即向量中元素的整体数值大小),只看元素的 "比例分布" 是否匹配(比如 "[1,2]" 和 "[2,4]" 方向完全一致,余弦值 = 1)。不受向量长度影响(如长文档与短文档,只要关键词分布方向一致,相似度就高),常用于文本主题相似性、高维向量方向比较(如信息检索、文本挖掘)。
- Tanimoto 相似性:目标是衡量两个向量的 "元素重叠度"(本质是 Jaccard 系数的向量扩展)------ 最初用于位元向量(0 = 不存在,1 = 存在),计算 "共同存在的元素数" 与 "至少一个存在的元素数" 的比例(比如 "[1,1,0]" 和 "[1,0,1]",交集元素数 = 1,并集元素数 = 3,Tanimoto=1/3);扩展到普通向量后,仍保留 "重叠度优先" 的逻辑,而非 "方向优先"。受向量中"存在元素"的交集/并集比例影响,更适合衡量"集合层面的重叠程度"(如生物特征匹配、物品特征重叠度分析),与向量方向无直接关联。

简而言之,二者核心逻辑(方向vs重叠度)、计算逻辑(夹角余弦vs交集/并集比)及应用场景完全不同。
而且,Tanimoto相似度仅适用于二进制变量。
2️⃣Tanimoto similarity
Tanimoto相似性,其实更多地是用在化学信息学上,用于比较分子和分子之间的相似度。
简单来说就是描述一个分子,有一连串feature问题可以定义,比如说我定义1000个问题来描述1个分子的性质,其中Q1假设是问这分子有没有芳香环,这个quiz的答案可以是yes(1)或者是no(0),
那么我用来表示这个分子的feature bit vector(特征位向量)在第一位上,就可以填0或1,
这样,每一个分子的理化性质,我都可以用一个1000位的比特字符串(二进制01字符串)来描述。
那么不同的分子之间,就都有这么一个字符串,那么我就可以逐位比较这两个01序列。
也就是分子描述符作为分子特征,用该特征位上的01字符串,来做相似性比较。
简单来说:针对分子描述符的bitmap(或者是bitstring),其中固定大小的数组中的每一位代表被建模分子中某个特征的呈现或缺失。那么这个Tanimoto相似度比率的定义就是共有位数的数量,除以两个样本中非0的位数数量。
用数学术语表示,如果样本 X 和 Y 是位图(1维位图,即bitstring),Xi是 X 的第 i 位,
分别是按位与和按位或运算符,那么相似度比率是

其实我们可以看到,如果每个样本都被建模为一系列属性(feature),那么这个值就等于两个01位图集合的Jaccard index。根据前面所说,如果形式上是Jaccard index,其值域其实就在0-1之间,一般定义的Jaccard distance=1-Jaccard index。那么Tanimoto distance,如果针对具有非0相似度的位图进行定义,形式上其实就完全和Jaccard distance一致了,也就是也可以定义成1-Tanimoto similarity。
Tanimoto 相似度仅适用于二进制变量 ,并且对于二进制变量,Tanimoto 系数的范围为从 0 到 +1(其中,+1 为最高相似度)。

为了形式上区别于Jaccard distance,有的Tanimoto distance变体定义如下:

该系数有意不是一种距离度量。它被选择以允许两个差异很大的样本都相似于第三个样本。很容易构造一个反例来推翻三角不等式这一性质。
但总的来说,更多的资料,还是将Tanimoto系数从逻辑上认为是Jaccard index在向量空间中的拓展,但是与余弦相似性不要混淆。
3️⃣简单匹配系数
简单匹配系数(simple matching coefficient,SMC),又称为Rand similarity coefficient,是用于比较样本集合之间相似性与多样性的统计量。

我们可以采用这里SMC的定义方式来区分Jaccard index与SMC的区别:
设x和y是两个对象,都有n个二元属性组成,这两个对象(二元向量)进行比较,可以生成4个两:
- M00=x取0且y取0的属性个数
- M10=x取1且y取0的属性个数
- M01=x取0且y取1的属性个数
- M11=x取1且y取1的属性个数

那么计算公式上:


可以看到简单匹配系数会考虑无效匹配feature(分子、分母上都考虑),但是Jaccard index就都不考虑。
对于Jaccard index、Tanimoto系数、简单匹配系数SMC之间关系的深入分析,可以参考我之前的一篇博客https://blog.csdn.net/weixin_62528784/article/details/150592838?spm=1001.2014.3001.5502
(或者参考Jaccard index详细的外文资料,一般这些指标都以Jaccard index为主)
(3)假设检验统计量分布
(4)KL散度/相对熵
KL散度对于离散分布和连续分布都有定义,具体展开都放到下文的连续分布部分,此处只做简单介绍:
对于离散随机变量,可以定义其概率分布P和Q的KL散度:

1)KL散度(相对熵)
JS 散度
互信息
相对熵
交叉熵
2)卡方统计量
K-S检验统计量
其他假设检验的统计量:
连续分布
前面讨论的形式上更多是两个数值点之间的距离,实际上两个概率分布之间的距离也有直接定义的度量方式
(1)KL散度/相对熵(Kullback--Leibler divergence)
- 统计意义:衡量两个分布之间的差异程度。若两者差异越小,KL散度越小,反之亦反。当两分布一致时,其KL散度为0。正是因为其可以衡量两个分布之间的差异,所以在VAE、EM、GAN中均有使用到KL散度。
- 信息论角度意义:用近似分布来近似真实分布时的信息损失(额外需要的平均信息量/编码比特数,额外需要支付的代价或者是成本)
- 取值范围:[0,+∞],当两个分布接近相同的时候KL散度取值为0,当两个分布差异越来越大的时候KL散度值就会越来越大。
衡量两个概率分布P和Q的差别:
设有1个未知分布P(x),而Q(x)是我们获得的一个对P(x)的近似,按照Q(x)对该随机变量的各个值进行编码(对x~P(x)的每个值x的编码就是Q(x),也就是同1个x分别有映射到P(x)和Q(x)),
那么平均编码长度比按照真实分布的P(x)进行编码要额外长一些,多出来的长度就是KL散度


简单来说:用Q近似P,计算KL散度
,多出来的香农熵,其实是从P到Q的信息损失。(QPKLPQPQ)
python
这里扯一点信息论里的信息编码与比特数:
信息编码与比特数
在信息论中,1个事件的信息量与其不确定性成正相关,也就是说,如果一件事越不确定、越是模糊,那么这件事所包含的信息量就越大(比如说,天气预报说明天晴天,与说明天是晴天但可能会转阴天,前者是100%确定的晴天,信息量就很少,但是后者可以说有50%概率是晴天,50%概率是阴天等等,信息量就很大)。
简而言之,1个事件的发生概率越小,其携带的信息量就越大。
具体来说,1个事件x的信息量可以用其发生概率的负对数来表示:

其中P(x)是事件x发生的概率,
信息量的单位通常是对数底数决定的,如果底数是2,单位就是比特bit(以2为底为bit,以e为底为nat,以10为底为hart),口语上说的信息量、比特数、编码比特长度等都是同一个概念。

也有的表述(⚠️注意,是一种观点,仅供参考 ):低概率随机事件的高信息量 ,是因为概率越低,需要越多的信息去验证,也就是把消息中所蕴含的"信息量"表述成消除不确定性所需的信息量(所以一件事概发生概率越低,其所蕴含的信息量就越大,有的人表述成"概率越低,越需要越多的信息去验证,也就是消除不确定性所需要的信息量越大,就是所谓理解的低概率事件的高信息量")。

编码长度
假设我们有一个随机变量X,其真实分布是P(x)。如果我们用一个最优编码方案来编码X,那么每个样本x的平均编码长度(即平均比特数,也就是平均信息量)就是:

这就是随机变量X的香农熵(Shannon Entropy),表示了在分布P下,每个样本平均需要的比特数来编码。


高熵表明结果分布更均匀
使用错误的分布编码
现在,假设我们错误地使用分布Q(x)来编码服从分布P(x)的样本。在这种情况下,每个样本x的编码长度(也就是每个样本的信息量)变为
。
此时,使用Q来编码P的样本的平均编码长度(平均比特数,平均信息量)为

我们现在来简单拆分一下这个公式:

最后一个变式,
就是用Q来编码P的样本的平均编码长度(平均比特数,平均信息量),而H(X)是使用P来编码P的样本的最优平均编码长度(平均比特数,平均信息量)。
因此,KL散度
表示的是使用Q而不是P编码时候,平均每个样本多出来的比特数。
这里可以举一个例子来通俗易懂得解释信息论中的一些基础概念,比如说扔硬币:
- 随机变量 ( X ****) :表示硬币抛掷的结果,可能的值是"正面"和"反面",每个值有一个对应的概率。
- ( P(正面) = 0.7 )
- ( P(反面) = 0.3 )
- 样本:每次抛硬币的结果,如"正面"或"反面"。
- 信息量 :一个事件携带的信息量,单位是比特(log2),用其负对数表示。
- I(正面) = -log2(0.7)≈0.514比特
- I(反面) = -log2(0.3)≈1.737比特
- 编码比特数/编码长度 :用多少比特来表示一个事件,等于信息量。
- 编码比特数(正面) = 0.514比特
- 编码比特数(反面) = 1.737比特
- 平均编码长度(熵) :在某个概率分布下,所有事件的编码长度的平均值。
- 硬币抛掷的平均编码长度 H(X) = 0.7log2(0.7)+ 0.3log2(0.3)≈0.881比特
在口语表述上,我们可以在编码长度/编码比特数/信息量等概念之间进行切换。
说了这么多,还是对照这个公式

KL散度,就是在描述一件事时,用分布Q(x)近似P(x)的信息损失(多出来的平均信息量是额外需要补充的)、多出来/额外需要的平均编码长度、多出来/额外需要的平均比特数。
如何理解这里说的是信息损失,而不是信息增益呢?
毕竟KL散度具有非负性(下文会提到),那么我们为什么不能说KL散度是用Q分布来近似P分布时多出来的信息量呢,为什么不能说成是信息增益呢?
因为如果Q(x)与P(x)不同,那么使用Q(x)来编码P(x)的样本时,每个事件x的编码长度会增加。这个增加的编码长度反映了信息的丢失,因为Q(x)不能完全捕捉到P(x)的所有特征。换句话说,使用Q(x)来编码P(x)的样本时,你需要更多的比特来表示这些样本,这反映了信息的丢失(为了编码来自 P的信息,但由于我们错误地使用了 Q的模板,我们不得不支付额外的"码长"成本),理解为用Q近似P所付出的额外成本或损失更好。
这样侧面说明了信息是不会凭空增加的,信息量只会在传递过程中发生衰减,就好像自然界没有自然的熵减过程。
这其实就是信息论中的热力学第二定律 ,也就是薛定谔说过的"信息就是负熵"。
python
下面是wiki中的解释
本质上,KL散度是数据在原始分布与近似分布的概率值的对数值之差的期望(3个公式一个道理)





这里推导的时候,可以简单理解为测度的微分是概率密度函数(dP=p(x)dx)

其中吉布斯不等式,可以参考:


从定义上可以了解,KL散度不具有对称性,不满足最前面提到的度量公理,所以KL散度是非度量距离,不是严格的可度量距离。
如果再考虑对称性的实现,那就是下面的JS散度。
(2)JS散度(Jensen--Shannon divergence)
- 统计意义:KL散度的一种变体,具体物理意义可以参考KL散度
- 取值范围:当用以2为底的对数来定义信息量-logP(x)时,JS散度的值域范围是[0,1],相同则是0,相反为1。相较于KL散度,对相似度的判别更确切了


几何均值,其实就是均等权重,混合分布M中P和Q权重相等。
初学者往往有一个疑惑,就是KL散度D(P||Q)衡量的是从Q近似P时P到Q的信息损失,那么我取D(P||Q)与D(Q||P)的均值不就行了?一个反驳的点,就是无法拓展到多个概率分布的比较。
如果对不同随机变量分布,取不同权重,可以得到广义的JS散度。


(3)交叉熵(cross entropy)
- 交叉熵 和KL散度作为目标函数效果是一样的,从数学上来说相差一个常数。
在神经网络中,交叉熵可以作为损失函数,因为它可以衡量P和Q的相似性。
从公式上:
H(P,Q)=D(P||Q)+H§

可以简单看出,真实分布P相对于估计/理论分布Q的交叉熵 =真实分布P相对于估计/理论分布Q的相对熵 +真实分布P的香农熵,也不是交叉熵=相对熵+香农熵的形式(交相香,交叉相对香农)。
我们简单地拆分各自的意义来理解,就是用分布Q去近似分布P的时候、P到Q损失的信息,加上原先P的平均信息量,就是H(P,Q)的统计意义。
对于一个分布比较来说,如果分布P是真实分布,真实分布一般来说在机器学习任务中是已知的,那么H(P)实际上就是一个常数,那么交叉熵实际上就是单纯比相对熵多了一个常数信息量。
所以如果用交叉熵来区分两个概率分布之间的距离的话,实际上比较的还是相对熵的距离区分所作出的贡献,也就是说所谓的距离,其实本质上还是相对熵,只不过是加上了一个常数。

(4)对熵的总结:从信息论的角度(也就是平均信息量,编码这些信息所需要的字节数,编码序列长度)

所以我们很容易理解:用理论分布Q来表示真实分布P描述的随机变量(事件s)的所需编码bit数
=真实分布P描述所需编码bit数+P-Q额外多出来的编码bit数(也就是真实分布P到理论分布Q的信息损失)。

只有当真实分布P的熵也就是平均信息量不变时,交叉熵=相对熵+常数,那么在当loss的时候,最小化相对熵就等价于最小化交叉熵。
这个时候再回到我们的机器学习任务上来,也就是model训练的目的上来,从贝叶斯学派的角度来讲:


逻辑思路就是,为了让学到的模型分布更贴近真实数据分布,我们最小化模型数据分布与训练数据之间的KL散度,而因为训练数据的分布是固定的是,所以最小化KL散度等价于最小化交叉熵。因为等价,而交叉熵更简答更好计算,所以一般常用交叉熵。

3,序列之间的距离
(1)比较等长序列
1️⃣汉明距离(Hamming distance):度量两个长度相同的字符串之间的相似度
两个等长字符串s1与s2之间的汉明距离,定义为将其中一个字符串变为另外一个所需要作的最小替换次数,也就是对应位置的不同字符的个数(两个字符串对应位置的不同字符的个数)。
汉明距离有一个最为鲜明的特点就是它比较的两个字符串必须等长,否则距离不成立。
它的核心原理就是如何通过字符替换(最初应用在信号通讯中实际上是二进制的0-1替换),能将一个字符串替换成另外一个字符串(联系后文的编辑距离,其实replace替换就是一种最基本的编辑操作)


汉明距离也可以看作是一种简单匹配距离(Simple Matching Distance,SMD):

之所以说一种,是因为简单匹配系数SMC/距离SMD也有很多变种,或者说有很多差异定义,详细的SMD见上文的Jaccard index部分,这里的SMD更像是取出了Jaccard index的分子部分(1-(分子形式上的M00+M11))。
也类似于分类问题中的指示函数(indicator function):

然后像汉明距离这种简单的编辑距离,其实在一些情况下,某些特定的值相等不能代表什么。
比如说我通过RNA-seq测序检测两种肿瘤细胞(样本A和样本B)中1w个基因的表达状态,用1表示某gene在细胞中显著表达(对肿瘤发生有功能关联)、用0表示不表达(gene沉默,无功能参与)。
一般情况下肿瘤相关gene仅占总gene的极少数,而绝大多数gene在两种细胞中均不表达(即00数据)。
这个时候:
- 若两个样本的00数据占比比较高,比如说1w个gene中有9.5k个gene均不表达,仅能说明"多数无关gene未激活",无法证明两种肿瘤细胞的分子特征相似------就好像两个用户都没看过95%的冷门电影,不代表两个人的观影偏好一致(也就是不能推出这两个人亲近、相似之类的结论)
- 但如果两个样本存在大量11数据(比如说共同表达100多个肿瘤相关gene,然后这些gene多为调控细胞增殖、凋亡的关键gene),则一般是能够直接证明两种肿瘤细胞的分子机制高度相似(比如说都属于"表皮生长因子受体驱动型肿瘤")------类似于两个用户都看过100多部宫崎骏的相同动画电影,是能够直接体现偏好重叠的
这种场景下,11 数据(共同表达的功能基因)是判断样本相似性的核心依据,00 数据(共同不表达的无关基因)因无功能关联而被忽略。
所以说汉明距离这种简单的编辑距离、或者说简单的匹配系数距离,仅仅只是关注值相等的feature其实说明不了什么,其中共享的feature比例是多少、哪些是共有的、共有的占多少,这些数据其实都不能够体现。
所以我们需要一种距离,刻画序列中等于1所占的权重应该远远大于0的权重,这也就是前文中的Jaccard index(所以我们说形式上不止要分子,更要分母)
2️⃣Jaccard index衍生距离:参考上文"集合之间的距离"部分,也适用于下文非等长序列的扩展
3️⃣分类数据点间的距离
- 针对字符串形式 的分类样本:当两个分类样本以等长字符串 表示时(如 DNA 序列片段、用户兴趣标签的二进制编码),可通过汉明距离衡量其差异。前面说了,汉明距离,其实也算是一种简单的编辑距离,就是将其中一个字符串转换为另一个字符串所需的最小字符替换次数。替换操作不涉及字符的插入与删除,仅适用于长度完全一致的字符串。
- 针对树形结构形式 的分类样本:当分类样本以树形结构 表示时(如商品分类体系 "/product/spot/ballgame/basketball"、生物分类学中的物种谱系也就是进化树),其相似性可通过 "共同路径长度 " 衡量 ------ 即两个样本在树形结构中从根节点到各自节点所经过的 "相同路径片段的长度",相同路径越长,说明两个样本的分类层级越接近,相似性越高。例如,树形节点 "/product/spot/ballgame/basketball" 与 "/product/spot/ballgame/soccer/shoes" 的共同路径为 "/product/spot/ballgame",长度大于其与 "/product/luxury/handbags" 的共同路径(仅 "/product"),因此前两者的相似性更高。
(2)比较非等长序列
1️⃣编辑距离:Levenshtein distance
前面提到的汉明距离,用于比较两个固定相等长度的序列。
但是,如果要比较两个不同长度的字符串,不仅要进行替换,而且要进行插入与删除的运算,在这种场合下,通常使用更加复杂的编辑距离等算法。


编辑距离也有很多种,一般多指Levenshtein distance(莱文斯坦距离):
也就是字符串转换间所需额度最少编辑操作次数。


编辑距离是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。编辑距离求的是最少编辑次数,这是一个动态规划的问题。是不是听起来很熟悉,其实序列比对算法中的字符操作、以及对应的打分函数、打分矩阵,这些要素都齐全了,我们完全可以从机器学习的角度来看序列比对。
从本质上讲,DNA、蛋白质等序列比对就是一个机器学习任务,可以参考我的上一篇博客:https://blog.csdn.net/weixin_62528784/article/details/151372630?spm=1001.2014.3001.5502
(3)时间序列分析
动态时间规整(Dynamic Time Warping,DTW)
主要用于时间序列分析中,用于测量两个时序序列之间相似性。
序列的速度可能不同。例如,即使一个人走得比另一个人快,或者观察过程中存在加速和减速
实际上任何可以转换为一维序列的数据都可以使用DTW进行分析。
前面提到的KL散度,其实也可以定义一个置换序列的距离,然后就可以使用
总结:
因为距离度量最基本的就是满足3条基本公理:
反身性/同一性、对称性、三角不等式,其中非负性可以由前面这3条推出;
最起码要能够使用的话,同一性和对称性必须得满足,三角不等式没有那么严格
参考:
https://zh.wikipedia.org/wiki/度量
https://zh.wikipedia.org/wiki/距离
https://zh.wikipedia.org/wiki/度量空间
https://zh.wikipedia.org/wiki/萊文斯坦距離
https://zh.wikipedia.org/zh-cn/雅卡尔指数
https://zh.wikipedia.org/wiki/吉布斯不等式
https://zh.wikipedia.org/wiki/相对熵
https://en.wikipedia.org/wiki/Jensen–Shannon_divergence
https://zh.wikipedia.org/wiki/交叉熵