![速通深度学习数学基础](https://wfqqreader-1252317822.image.myqcloud.com/cover/778/47793778/b_47793778.jpg)
1.2 向量距离计算
前面详细讲解了如何使用向量来表示各类特征。除了将向量作为特征输入模型,我们有时也需要通过向量之间的距离来衡量特征之间的差异。
有多种方法可以度量向量之间的距离,每种方法都有其应用场景和优缺点。这些方法有一些共性,列举如下。
● 同一性:d(x,y)=0,同一点到自身的距离为0。此时,也可以写成x=y。
● 非负性:d(x,y)≥0,距离不能小于0。
● 对称性:d(x,y)=d(y,x)。
● 直递性:d(x,y)≤d(x,z)+d(z,y)。
很明显,有多种函数可以同时满足上述条件,理论上,这些函数都可用于度量距离。但是,这些函数中的大部分在机器学习中并不常用。下面介绍机器学习中的常用距离。
欧氏距离(Euclidean Distance)是机器学习中最为常见的距离之一,它源自两点之间的距离公式。两个特征向量分别为
x=[x1,x2,…,xn]T
y=[y1,y2,…,yn]T
欧氏距离的计算公式如下。
![](https://epubservercos.yuewen.com/D80F69/27210566704740106/epubprivate/OEBPS/Images/txt001_7.jpg?sign=1739022243-ozQfjAeC9TfbcOSQkjZvxRTRyLZfk5CS-0-b3d6b0589554362672e98109ca11a36c)
dEuclidean(x,y)常写作‖x,y‖。特别地,‖x‖表示x与原点之间的欧氏距离,‖x‖=。
曼哈顿距离(Manhattan Distance)也可用于度量两点之间的距离。想象一下:你在曼哈顿街头,要开车从一个十字路口到另一个十字路口,实际的驾驶距离是这两个十字路口之间的直线距离吗?显然不是——除非你能穿越大楼。这里的实际驾驶距离就是曼哈顿距离。曼哈顿距离也称为城市街区距离(City Block Distance),其计算公式如下。
![](https://epubservercos.yuewen.com/D80F69/27210566704740106/epubprivate/OEBPS/Images/txt001_9.jpg?sign=1739022243-v3Jw30QLXLC3Dcr2ItnIT0usi4wn7i3j-0-f2f56b9f9839be48647678201d70effa)
dManhattan(x,y)常写作|x,y|。特别地,|x|表示x与原点之间的曼哈顿距离,即|x|=。
在国际象棋棋盘上,国王可以朝8个方向移动。国王移动到目标点所需的步数就是切比雪夫距离(Chebyshev Distance)。切比雪夫距离用于计算各维度数值差中的最大值,计算公式如下。
dChebyshev(x,y)=max(|x1-y1|,|x2-y2|,…,|xn-yn|)
切比雪夫距离和曼哈顿距离的区别在于:在斜向移动时,曼哈顿距离所需的距离为2,切比雪夫距离所需的距离为1。
广义圆可以定义为到圆心距离相等的点的集合。使用以上三种距离画出来的“圆”,如图1-4所示。
![](https://epubservercos.yuewen.com/D80F69/27210566704740106/epubprivate/OEBPS/Images/txt001_11.jpg?sign=1739022243-Jlr8U3sR4KTIuvkSrOvVVki5YyaThR4T-0-4bb5537d9bdd437ecd590bfdffb2ec93)
图1-4
闵可夫斯基距离(Minkowski Distance)的计算公式如下。
![](https://epubservercos.yuewen.com/D80F69/27210566704740106/epubprivate/OEBPS/Images/txt001_12.jpg?sign=1739022243-sE1gPX4C3RkTzMhzISKlCIIEdqCe8K9s-0-8c5e4a6f133cce283ec4ded94b98ef0d)
其中,p是一个变参数。
闵可夫斯基距离公式是一个通项公式。以上介绍的三种距离其实都是闵可夫斯基距离的特例。
● 当p=1时,就是曼哈顿距离。
● 当p=2时,就是欧氏距离。
● 当p→∞时,就是切比雪夫距离。
以上三种距离都有一个缺点,就是容易受特征量纲的影响。例如,用一个2维特征表示人的体重和身高,体重的单位为千克,身高的单位为毫米,如[60,1700]T。此时,体重的数量级远小于身高,这会导致在计算距离时放大身高的作用。
我们以欧氏距离为例,讨论如何解决这个问题。对数据进行归一化,即将各个维度的均值和方差分别归一至(0,1),以消除量纲不同带来的差异。归一化在各个维度独立进行,公式如下。
![](https://epubservercos.yuewen.com/D80F69/27210566704740106/epubprivate/OEBPS/Images/txt001_13.jpg?sign=1739022243-DQyVpkTtlwp5wgvu3Pyhy67gGmOyzBUw-0-448f2bc6b730db5dc239b5856c9597c3)
σi为第i维特征所对应的标准差。修正后的距离计算公式如下。
![](https://epubservercos.yuewen.com/D80F69/27210566704740106/epubprivate/OEBPS/Images/txt001_14.jpg?sign=1739022243-tsTaPnIdoty5dJima5DrUUsUpRBNiOM2-0-943bc06aa126be99f55103e30b7ce0c9)
上述距离称作标准化欧氏距离(Standardized Euclidean Distance)。
在提取特征时,特征之间并不是独立的,维度之间往往存在冗余。例如,体重和身高之间就存在较强的相关性。特征冗余带来的影响是:某些因素在各个维度重复出现,在计算距离时会被重复计算,从而使其影响被放大。为了降低特征冗余的影响,可以使用马氏距离(Mahalanobis Distance)进行计算,公式如下。
![](https://epubservercos.yuewen.com/D80F69/27210566704740106/epubprivate/OEBPS/Images/txt001_15.jpg?sign=1739022243-hqDzcUg5gDf5V791cPYWESdIlgr2uBqf-0-5f45819f80c1e17aca439f565f4c967f)
这里使用了向量的表示方式。Σ为各维度的协方差矩阵,其中,对角线元素表示各维度自身的方差,非对角线元素表示各维度之间的相关性。可以看出,对于马氏距离,如果不考虑特征之间的相关性(非对角线元素为0),就会退化为标准欧氏距离。在使用标准欧氏距离或马氏距离时,因为涉及估计方差(协方差矩阵),所以需要一定的数据量,且数据量越大,方差(协方差矩阵)的估计结果越准。
我们用one-hot向量表示观影者所观看的电影的特征。假设有5部电影,那么向量的维度为5维。在看过的电影的特征位置写1,在没看过的电影的特征位置写0。观影者有2个人。我们是否可以通过one-hot向量之间的距离来度量他们的观影习惯的差异呢?答案是:不可以。因为我们无法确定他们都看过这5部电影——如果没有观影,那么自然无法提供关于喜好的信息,而在都为0的位置计算出来的距离是没有意义的。
假设观影者有3个人,user1和user2共同观看了两部电影,user1和user3共同观看了一部电影,则他们的观影情况所对应的向量分别为
user1=[1,0,0,1,0]
user2=[1,0,1,1,0]
user3=[0,0,0,1,0]
而我们的期望是user1和user2的距离更近。使用欧氏距离计算user1和user2、user1和user3的距离,公式如下。
dEuclidean(user1,user2)=1
dEuclidean(user1,user3)=1
user1和user2、user1和user3的欧氏距离相等,与我们的期望不符。因此,欧氏距离不能在此场景中有效度量观影习惯的差异。
然而,对于两个人都看过的电影,即两个人都为1的位置,却能反映出这两个人的喜好相同。可以使用Jaccard距离度量两个集合之间的差异,计算公式如下。
![](https://epubservercos.yuewen.com/D80F69/27210566704740106/epubprivate/OEBPS/Images/txt001_16.jpg?sign=1739022243-2MF4UO0auFbTMUXtYIQW5UGA1E3yAIrX-0-eb18df6c55c395a49742fe8c45644f4a)
在这里,A和B分别为这两个人看过的电影的集合,A∩B为这两个人看过的电影的交集,A∪B为这两个人看过的电影的并集。使用Jaccard距离进行计算,公式如下。
![](https://epubservercos.yuewen.com/D80F69/27210566704740106/epubprivate/OEBPS/Images/txt001_17.jpg?sign=1739022243-Sjw3ZCTDkmOpJOu2eO7z6QBQvMLLv5zB-0-b5bd267217c10ccdb2b06407a33745aa)
显然,此时dJaccard(user1,user2)<dJaccard(user1,user3),user1和user2的距离比较近,这也符合我们的认知。
Jaccard距离的用途很广,可用于度量购物偏好的差异、文章内容的差异等具有同质集合属性的特征。
在机器学习中,除了距离,也常使用相似度来度量两个向量。顾名思义,两个向量的相似度越高,说明它们越相似。因此,相似度和距离反相关。
余弦相似度(Cosine Similarity)是一种常见的相似度,其计算公式如下。
![](https://epubservercos.yuewen.com/D80F69/27210566704740106/epubprivate/OEBPS/Images/txt001_18.jpg?sign=1739022243-9R9TgRh8jhDs19rwJqXEIAOfZxedfXfN-0-8d9d14b00b4d631f75349c1afac69a6b)
余弦相似度的值域是[-1,+1]。它用于衡量两个向量的夹角,夹角越小,两个向量就越相似。+1表示两个向量的相似度相同,即两个向量的方向完全相同(cos0=1)。-1则表示两个向量的方向完全相反(cosπ=-1),此时两个向量高度负相关。当余弦相似度为0时,两个向量是互相垂直的,称作正交。相互正交的向量彼此线性无关。
余弦相似度,如图1-5所示。
![](https://epubservercos.yuewen.com/D80F69/27210566704740106/epubprivate/OEBPS/Images/txt001_20.jpg?sign=1739022243-aEakez6z0ewazkI7D64fahuxGPPVumGu-0-6173619cdd3c7007ba0718cd70efff06)
图1-5
可以看出,余弦相似度和向量的长度无关,它是用来衡量各个维度比例的相似性的。当两个向量各个维度的比例相同时,它们的夹角为0,相似度为1。
称为向量x和y的内积,记作
。内积可以理解成未归一化的余弦相似度,值域为(-∞,+∞),有时也用于度量向量的相似性。‖x‖为归一化因子,用于将向量x的长度归一至1。相比较而言,cos(x,y)只考虑了x和y的角度差,〈x,y〉则综合考虑了x和y的角度差与长度差。
有时需要将余弦相似度转换为余弦距离,公式如下。
dcos(x,y)=1-cos(x,y)
特别地,当‖x‖=1、‖y‖=1时,dcos(x,y)和dEuclidean(x,y)有如下关系。
![](https://epubservercos.yuewen.com/D80F69/27210566704740106/epubprivate/OEBPS/Images/txt001_23.jpg?sign=1739022243-8tpG1ZvxdvBZtS8vnOxR2Np2ZDyBm9JR-0-62e39ed8ad26064c863556d28047c8b1)
即欧氏距离和余弦相似度之间存在单调关系。