常用距离度量的原理与意义

154 阅读11分钟

度量空间

度量空间(Metric Space)是表示给定集合中数据点之间的关系的数学抽象构造。距离度量在度量空间中得到描述,并满足非负性、对称性、三角不等性。

其数学描述如下。给定一个二元组(S,d)(S,\, d),其中 SS 是非空的数据集合。对于定义在SS的元素, 距离度量函数dd具有如下性质:

  • 非负性:对于任意 x,yS,d(x,y)0x, y \in S, d(x, y) \geqslant 0, 并且 d(x,y)=0x=yd(x, y)=0 \leftrightarrow x=y .
  • 对称性:对于任意 x,yS,d(x,y)=d(y,x)x, y \in S, d(x, y)=d(y, x) .
  • 三角不等性:对于任意 x,y,zS,d(x,y)+d(y,z)d(x,z)x, y, z \in S, d(x, y)+d(y, z) \geqslant d(x, z) .

度量空间可以作为相当多数据类型及其距离函数的抽象规范,我们可以构造相当多的符合度量空间特性的距离度量函数。

基于向量的距离度量

向量类型是多维数据最常见的类型。其中,应用最为广泛的距离函数应该为Minkowski距离的不同实例化。

闵可夫斯基距离(Minkowski Distance)

两个 n\mathrm{n} 维向量 X=(x1,,xn) \mathrm{X}=\left(x_{1}, \ldots, x_{n}\right)Y=(y1,,yn)\mathrm{Y}=\left(y_{1}, \ldots, y_{n}\right) 之间的 p\mathrm{p}(p=1,2,3,,)(\mathrm{p}=1,2,3, \ldots, \infty)闵可夫斯基距离 LpL^{p} 定义为:

Lp((x1,,xn),(y1,,yn))=i=1nxiyipp L^{p}\left(\left(x_{1}, \ldots, x_{n}\right),\left(y_{1}, \ldots, y_{n}\right)\right)=\sqrt[p]{\sum_{i=1}^{n}\left|x_{i}-y_{i}\right|^{p}}

有闵可夫斯基距离 Lp(p=1,2,3,,)L^{p}(p=1,2,3, \ldots, \infty) 满足度量空间距离函数性质。

曼哈顿距离(Manhattan Distance)

两个 n\mathrm{n} 维向量X=(x1,,xn) \mathrm{X}=\left(x_{1}, \ldots, x_{n}\right)Y=(y1,,yn)\mathrm{Y}=\left(y_{1}, \ldots, y_{n}\right) 之间的曼哈顿距离 L1 L^ 1p=1\mathrm{p}=1 的闵可夫斯基距离:

L1((x1,,xn),(y1,,yn))=i=1nxiyi L^{1}\left(\left(x_{1}, \ldots, x_{n}\right),\left(y_{1}, \ldots, y_{n}\right)\right)=\sum_{i=1}^{n}\left|x_{i}-y_{i}\right|

在几何学上,曼哈顿距离用以标明两个点在标准坐标系上的绝对轴距总和。“曼哈顿”的称谓即源于在方正的纽约曼哈顿街区,从一个十字路口开车到另外一个十字路口的实际驾驶距离。由是,曼哈顿距离也称为城市街区距离(City Block distance).

欧几里得距离(Euclidean Distance)

两个 n\mathrm{n} 维向量 X=(x1,,xn)\mathrm{X}=\left(x_{1}, \ldots, x_{n}\right)Y=(y1,,yn)\mathrm{Y}=\left(y_{1}, \ldots, y_{n}\right) 之间的欧几里得距离 L2 L^ 2p=2\mathrm{p}=2 的闵可夫斯基距离:

L2((x1,,xn),(y1,,yn))=i=1n(xiyi)2 L^{2}\left(\left(x_{1}, \ldots, x_{n}\right),\left(y_{1}, \ldots, y_{n}\right)\right)=\sqrt{\sum_{i=1}^{n}\left(x_{i}-y_{i}\right)^{2}}

考虑到欧氏距离各维度分量的分布可能不一样,实践中往往采取改进的方案:标准化欧氏距离,即在使用该距离度量前对数据进行标准化。记样本集的标准差为kk,则有标准化的欧氏距离:

d(x,y)=k=1n(xkyksk)2 d(x, y)=\sqrt{\sum_{k=1}^{n}\left(\frac{x_{k}-y_{k}}{s_{k}}\right)^{2}}

将方差的倒数看成是一个权重,可见标准化的欧氏距离事实上是一种加权欧氏距离。

欧几里得距离的显著优点,在于其非常直观,且易于实施,在很多低维数据的度量上都能有良好的表现。在高维度或稀疏数据集中往往表现不佳,会遭遇“维度灾难”问题。

切比雪夫距离(Chebyshev Distance)

两个 n\mathrm{n} 维向量 X=(x1,,xn)\mathrm{X}=\left(x_{1}, \ldots, x_{n}\right)Y=(y1,,yn)\mathrm{Y}=\left(y_{1}, \ldots, y_{n}\right) 之间的切比雪夫距离 LL^{\infty} 就是其 p=\mathrm{p}=\infty 的闵可夫斯基距离:

L((x1,,xn),(y1,,yn))=limpi=1nxiyipp=max1inxiyi\begin{aligned} L^{\infty}\left(\left(x_{1}, \ldots, x_{n}\right),\left(y_{1}, \ldots, y_{n}\right)\right)&=\lim _{p \rightarrow \infty} \sqrt[p]{\sum_{i=1}^{n}\left|x_{i}-y_{i}\right|^{p}}\\ &=\max _{1 \leq i \leq n}\left|x_{i}-y_{i}\right| \end{aligned}

由定义可见,曼哈顿距离是两点连线在所有坐标轴上投影所得线段的长度之和;欧几里得距离是空间两点连线的长度;切比雪夫距离是两点连线在所有坐标轴上投影所得线段的最大长度。

在二维平面内,讨论不同的闵可夫斯基距离的原点距大小,可以进一步说明了闵可夫斯基距离不同特例间的关系。令 UBpUB^{p} LpL^{p}空间中的 单位圆, 即到原点的 LpL^{p} 距离不超过1 1 的点的集合,Lop(X) L^{op}(\mathrm{X}) 是点 X=(x1,x2)\mathrm{X}=\left(x_{1}, x_{2}\right) 到原点的Lp L^{p} 距离。不同闵可夫斯基距离的 Lp L^{p} 空间单位圆如图所示。

f1.png

不同闵可夫斯基距离的 L^p 空间单位圆

UB1UB^{1}边缘的点到原点的曼哈顿距离是 1 , 即:

L1((x1,x2),(0,0))=i=12xi0=x1+x2=1 L^{1}\left(\left(x_{1}, x_{2}\right),(0,0)\right)=\sum_{i=1}^{2}\left|x_{i}-0\right|=\left|x_{1}\right|+\left|x_{2}\right|=1

故有其单位圆表现为菱形。

UB2UB^{2}边缘的点到原点的欧几里得距离是 1 ,其单位圆表现为圆形。

UBUB^{ \infty}边缘的点到原点的切比雪夫距离是 1 ,即有

L((x1,x2),(0,0))=max1i2xi0=max(x1,x2)=1L^{\infty}\left(\left(x_{1}, x_{2}\right),(0,0)\right)=\max _{1 \leq i \leq 2}\left|x_{i}-0\right|=\max \left(\left|x_{1}\right|,\left|x_{2}\right|\right)=1

其单位圆表现为正方形。

可见,UB1,UB2,UB3,,UBU B^{1}, U B^{2}, U B^{3}, \ldots, U B^{\infty} 依次被下一个集合包含的。(0,1),(1,0),(0,1),(1,0)(0,1),(1,0),(0,-1),(-1,0) 是各空间单位圆的边缘上的共同点。随着p p 的增加, UBpU B^{\mathrm{p}} 将 从菱形的44条边开始, 逐渐向正方形的 44 个角填充, 直至 p=\mathrm{p}=\infty 时填满整个正方形,严谨关系如图所示。有:

UB1UB2UBU B^{1} \subseteq U B^{2} \subseteq \cdots \subseteq U B^{\infty}

相对应地,对于UB1U B^{1}内一点X,可以归纳:

1Lo1(X)Lo2(X)Lo(X)1\geq L^{o 1}(\mathrm{X}) \geq L^{o 2}(\mathrm{X}) \geq \cdots \geq L^{o \infty}(\mathrm{X})

2png.png

R^2上同一不同闵可夫斯基距离的 L^p 空间单位圆

马氏距离(Mahalanobis Distance)}

事实上,闵可夫斯基距离并没有考虑向量分量之间的相关性及分布的差异。对这些因素的考虑,需要引入马氏距离(Mahalanobis distance).

马氏距离表示数据的 协方差距离。与欧式距离不同的是,在马氏距离的计算中,各分量是 尺度无关 (Scale Invariant) 的。

对于一个协方差矩阵为 \sum 的变量 xx y y , 马氏 距离定义为:

d(x,y)=(xy)1(xy)d(x, y)=\sqrt{(x-y)^{\top} \sum^{-1}(x-y)}

马氏距离的优势在于其不受不同维度之间量纲的影响,但这也同时导致了一个潜在的问题,即扩大了变化量较小的变量的影响。

在几何意义上,可以将马氏距离理解为经过旋转变换缩放后的欧氏距离。通过按照主成分旋转,可实现维度间的相互独立。下图直观地呈现了这一性质。左子图根据欧氏距离计算,可见红色 的点距离 绿色 的点更近;右子图根据马氏距离计算,可见经过旋转变换缩放,维度间解耦,相关性消除,经过标准化后,红色的点距离蓝色的点更近。

同一数据集,左图根据欧氏距离计算,右图根据马氏距离计算

可简要推导马氏距离与欧氏距离的关系: 假设原始的多维样本数据 Xn×m X_{n \times m}(nn 行, mm 列 ) :

Xn×m=x11x12x1mx21x22x2mxn1xn2xnm\begin{align} X_{n \times m} & = \begin{array}{cccc} x_{11} & x_{12} & \cdots & x_{1 m} \\ x_{21} & x_{22} & \cdots & x_{2 m} \\ \vdots & \vdots & \ddots & \vdots \\ x_{n 1} & x_{n 2} & \cdots & x_{n m} \end{array} \end{align}

其中每行表示一个样本, Xi X_{i} 表示样本的第i i 个维度, Xi=(x1i,x2i,,xni)T,i=1,2,,mX_{i}=\left(x_{1 i}, x_{2 i}, \ldots, x_{n i}\right)^{T}, i=1,2, \ldots, m ,则以上多维样本数据可记为: X=(X1,X2,,Xm)X=\left(X_{1}, X_{2}, \ldots, X_{m}\right) 样本总体的均值向量记为: μX=(μX1,μX2,,μXm)\mu_{X}=\left(\mu_{X 1}, \mu_{X 2}, \ldots, \mu_{X m}\right)

对数据进行转换,旋转至主成分,使维度间线性无关。假设将原始数据X通过坐标旋转矩阵U变换得到了新的坐标,对应的新数据集记为FF,其中FF集元素为f=(f1,f2,,fm)f=(f_1,f_2,…,f_m),则有

DM=(f1μF1λ1)2+(f2μF2λ2)2++(fmμFmλm)2=(fμF)T(UTΣXU)1(fμF)=(xμX)TUUTΣX1UUT(xμX)=(xμX)TΣX1(xμX)\begin{array}{l} D_{M}=\left(\frac{f_{1}-\mu_{F_{1}}}{\sqrt{\lambda_{1}}}\right)^{2}+\left(\frac{f_{2}-\mu_{F_{2}}}{\sqrt{\lambda_{2}}}\right)^{2}+\ldots+\left(\frac{f_{m}-\mu_{F_{m}}}{\sqrt{\lambda_{m}}}\right)^{2} \\ =\left(f-\mu_{F}\right)^{T}\left(U^{T} \Sigma_{X} U\right)^{-1}\left(f-\mu_{F}\right) \\ =\left(x-\mu_{X}\right)^{T} U U^{T} \Sigma_{X}^{-1} U U^{T}\left(x-\mu_{X}\right) \\ =\left(x-\mu_{X}\right)^{T} \Sigma_{X}^{-1}\left(x-\mu_{X}\right) \\ \end{array}

其中, λi,i=1,2,,m\lambda_{i}, i=1,2, \ldots, m表示每个维度的方差。

在实践中,马氏距离这一解除维度相关性的特性是很有用的。例如,在机器学习中,数据集的某些变量或标签数据与检测的目标并无关系,将这样的数据纳入距离度量的计算是并不适宜的。马氏距离的计算提供了解耦的可能性。通过优化计算马氏距离中的半正定矩阵,可以显著增强机器学习的泛化性能,此即度量学习的算法思想。

余弦相似度(Cosine Similarity)}

易从欧几里得几何空间,推广出向量内积(Inner Product of Vectors)的定义,从而引入余弦相似度(Cosine Similarity)作为一种距离度量。

从几何角度看,点积则是两个向量的长度与它们夹角余弦的积。在欧几里得空间中,点积可以直观地定义为: \begin{equation} x \cdot y=|x||y| \cos \theta \end{equation}

由此可得余弦相似度:

s(x,y)=cos(θ)=xyxy=i=1nxiyii=1nxi2i=1nyi2s(x, y)=\cos (\theta)=\frac{x \cdot y}{|x||y|}=\frac{\sum_{i=1}^{n} x_{i} y_{i}}{\sqrt{\sum_{i=1}^{n} x_{i}^{2}} \sqrt{\sum_{i=1}^{n} y_{i}^{2}}}

余弦相似度的取值范围为[1,1][−1,1]11表示两者完全正相关,1-1 表示两者完全负相关,00 表示两者之间独立。余弦相似度与向量的长度无关,只与向量的方向有关,但余弦相似度会受到向量平移的影响。

皮尔逊相关系数(Pearson Correlation)

考虑到余弦相似度会受到向量平移的影响,皮尔逊相关系数消除了这一问题。有皮尔逊相关系数定义为:

ρ(x,y)=cov(x,y)σxσy=E[(xμx)(yμy)]σxσy\rho(x, y)=\frac{\operatorname{cov}(x, y)}{\sigma_{x} \sigma_{y}}=\frac{E\left[\left(x-\mu_{x}\right)\left(y-\mu_{y}\right)\right]}{\sigma_{x} \sigma_{y}}

其中, cov\operatorname{cov} 表示协方差, EE 表示期望, μ\mu 表示均值, σ \sigma 表示标准差。对于样本的皮尔逊相关系数, 可以通过如下方式计算:

r=i=1n(xixˉ)(yiyˉ)i=1n(xixˉ)2i=1n(yiyˉ)2=1n1i=1n(xixˉσx)(yiyˉσy)\begin{aligned} r & =\frac{\sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)\left(y_{i}-\bar{y}\right)}{\sqrt{\sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)^{2}} \sqrt{\sum_{i=1}^{n}\left(y_{i}-\bar{y}\right)^{2}}} \\ & =\frac{1}{n-1} \sum_{i=1}^{n}\left(\frac{x_{i}-\bar{x}}{\sigma_{x}}\right)\left(\frac{y_{i}-\bar{y}}{\sigma_{y}}\right) \end{aligned}

变量位置和尺度的变化并不会引起皮尔逊相关系数的改变。图示给出了不同的(x,y)(x,y)之间的皮尔逊相关系数。当然,也可以看到,皮尔逊相关系数只能反映变量的线性相关性,而忽略了许多其他类型的关系或相关性。

pcorr.png

(x, y)的点集,以及各个点集中x和y之间的相关系数。可见相关系数反映的是变量之间的线性关系和相关性的方向

基于字符串的距离度量

基于字符串的距离度量也是常见的距离度量之一。常见的字符串距离函数包括海明距离、编辑距离等。

汉明距离(Hamming Distance)

对于字符串S[1...n]S[1...n],其中S(i)S(i)为其第ii个字符。汉明距离定义为两个字符串S1[1...n],S2[1n]S_1[1...n],\, S_2[1…n]之间相应位置上字符不相同的数目:

H(S1,S2)=i=1n{1,S1(i)S2(i)0,S1(i)=S2(i)\mathrm{H}\left(S_{1}, S_{2}\right)=\sum_{i=1}^{n}\left\{\begin{array}{ll} 1, & S_{1}(i) \neq S_{2}(i) \\ 0, & S_{1}(i)=S_{2}(i) \end{array}\right.

可以看到,因为000 0 次幂是0 0 ,故而海明距离也可以看作 p=0p=0 的闵可夫斯基距离。

编辑距离(Edit Distance)

在编辑距离的定义中,需要定义三个基本的字符串编辑操作:插入、删除、替换。两个字符串的编辑距离是把第一个字符串通过基本编辑操作,转化为第二个字符串时所需的最少的操作个数。

在数学描述上,令 E(S1,S2)\mathrm{E}\left(S_{1}, S_{2}\right) 为字符串 S1[1n]\mathrm{S}_{1}[1 \ldots \mathrm{n}]S2[1m]\mathrm{S}_{2}[1 \ldots \mathrm{m}] 之间的编辑距离, E(i,j)E(i, j) 为子串 S1[1i]S_{1}[1 \ldots i] S2[1j]S_{2}[1 \ldots j] 之间的编辑距离, 则边际情形 E(i,0)=i,E(0,j)=j0E(i,j)E(i, 0)=i, E(0, j)=j_{0} E(i, j) 可能来源于三种情况:

  • 基于 E(i1,j)\mathrm{E}(\mathrm{i}-1, \mathrm{j}) 删除 S1[1i]\mathrm{S}_{1}[1 \ldots \mathrm{i}] 子串的最后一个字符 S1(i)\mathrm{S}_{1}(\mathrm{i}) ;
  • 基于E(i,j1) E(i, j-1) S2[1..j1]S_{2}[1 . . j-1] 后面插入字符 S2(j) S_{2}(j);
  • 基于 E(i1,j1)E(i-1, j-1), 如果 S1(i)S_{1}(i)S2(j)\mathrm{S}_{2}(\mathrm{j}) 两个字符不同的话, 把 S1[1i1]\mathrm{S}_{1}[1 \ldots i-1] 子串后面的字符 S1(i)\mathrm{S}_{1}(\mathrm{i}) 替换为字符S2(j) \mathrm{S}_{2}(j) .

可见,编辑距离的计算有一定复杂度,其求解可以利用动态规划的思想进行优化计算。

通过为不同的编辑操作定义不同的权重,可以设计扩展的编辑距离,此即编辑距离的特征加权选择算法。在实践中,加权编辑距离也可以实现维度解耦,避免无关变量参与到距离度量的计算中,这和度量学习的数据处理思路是相似的。

基于集合的距离度量

在基于集合的距离度量中,有集合和距离函数构成了一个度量空间实例。

杰卡德距离

AA BB 为两个集合,则 AA B B 之间的杰卡德距离J(A,B)J(A,B)

J(A,B)=1ABABJ(A, B)=1-\frac{|A \cap B|}{|A \cup B|}

杰卡德系数sj=ABABs_j=\frac{|A \cap B|}{|A \cup B|}的取值范围为[0,1][0,1]00 表示两个集合没有重合,11 表示两个集合完全重合。 在机器学习实践中,杰卡德系数通常用于计算预测数据的准确性,或用于文本相似性分析。

戴斯系数

和杰卡德系数性质类似的是戴斯系数,有其定义为:

sd=2ABA+Bs_d=\frac{2|A \cap B|}{|A|+|B|}

斯系数的取值范围亦为[0,1][0,1] , 杰卡德系数和戴斯系数之间可以相互转换 sd=2sj/(1+sj),sj=sd/(2sd)s_{d}=2 s_{j} /\left(1+s_{j}\right), s_{j}=s_{d} /\left(2-s_{d}\right) 。不同于 杰卡德距离,戴斯系数的差异函数 d=1sdd=1-s_d 并不是一个严格的距离度量,其并不满足距离函数的三角不等式。

豪斯多夫距离

AA B B 为两个集合,d(A,B) d(A,B)是定义在AAB B 的元素之间的度量空间距离函数,则AABB之间的有向豪斯多夫距离h(A,B)h(A, B)和豪斯多夫距离H(A,B)H(A, B)满足:

h(A,B)=maxaA(minbB(d(a,b)))H(A,B)=max(h(A,B),h(B,A))\begin{array}{c} \mathrm{h}(\mathrm{A}, \mathrm{B})=\max _{a \in A}\left(\min _{b \in B}(d(a, b))\right) \\ \mathrm{H}(\mathrm{A}, \mathrm{B})=\max (\mathrm{h}(\mathrm{A}, \mathrm{B}), \mathrm{h}(\mathrm{B}, \mathrm{A})) \end{array}

其中, H(A,B)H(A, B) 满足度量空间距离函数性质, 集合和豪 斯多夫距离构成了一个度量空间实例。而由于一般而言,有h(A,B)h(B,A)h(A, B) \neq h(B, A) ,故而有向豪斯多夫距离h(A,B)h(A, B)并非严格的距离度量函数。 从最近邻算法的思路上看, 豪斯多夫距离是一个集合的所有元素到其 在另一个集合里的最近邻的距离的最大值。豪斯多夫距离在图像处理、图像匹配领域有广泛应用。

基于信息论的距离度量

相对熵 (Relative Entropy)

相对熵又称之为 KL 散度 (Kullback-Leibler Divergence),用于衡量两个分布之间的差异,定义为:

DKL(PQ)=iP(i)lnP(i)Q(i)D_{K L}(P \| Q)=\sum_{i} P(i) \ln \frac{P(i)}{Q(i)}

在信息论中,相对熵意义为用分布p去近似分布q时的信息损失量。由于KL\mathrm{KL} 散度为非负数DKL(PQ)0 D_{K L}(P \| Q) \geq 0, 同时其不具有对称性DKL(PQ)DKL(QP) D_{K L}(P \| Q) \neq D_{K L}(Q \| P), 也 不满足距离函数的三角不等式。所以相对熵并不是一个严格的距离度量。

JS 散度 (Jensen-Shannon Divergence)

JS散度为一种对称的衡量两个分布相似度的度量方式,可以视作对KL散度的改进,其定义为:

DJS(PQ)=12DKL(PP+Q2)+12DKL(QP+Q2)\begin{split} D_{J S}(P \| Q)&=\frac{1}{2} D_{K L}\left(P \| \frac{P+Q}{2}\right)\\ &+\frac{1}{2} D_{K L}\left(Q \| \frac{P+Q}{2}\right) \end{split}

可见,JS散度满足对称性。同时,JS散度通过构造两个分布的插值,可以一定程度上缓解KL散度中两个分布不重叠时散度无穷大的问题。

交叉熵(Corss Entropy)

机器学习的损失函数的设计常用散度,以此度量模型预测的分布 和真实的分布之间的距离,判断模型是否有效收敛。信息论中的交叉熵概念在机器学习中常用于构建损失函数,以衡量模型分布和训练数据分布之间的差异性。交叉熵定义如下:

H(P,Q)=H(P)+DKL(PQ)=iP(i)logQ(i)\begin{aligned} H(P, Q) & =H(P)+D_{K L}(P \| Q) \\ & =-\sum_{i} P(i) \log Q(i) \end{aligned}

例如,在分类问题中,当预测类别和真实类别的交叉熵不断减小时,说明模型可以更好地对输入进行分类。

参考

[1] ONTAÑÓN S. An overview of distance and similarity functions for structured data[J]. Artificial Intelligence Review, 2020, 53(7): 5309-5351.

[2] DEZA M M, DEZA E. Encyclopedia of distances[M]// Encyclopedia of distances. Springer, 2009: 1-583.

[3] KULIS B, et al. Metric learning: A survey[J]. Foundations and Trends® in Machine Learning, 2013, 5(4): 287-364.