速通深度学习数学基础
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 向量距离计算

前面详细讲解了如何使用向量来表示各类特征。除了将向量作为特征输入模型,我们有时也需要通过向量之间的距离来衡量特征之间的差异。

有多种方法可以度量向量之间的距离,每种方法都有其应用场景和优缺点。这些方法有一些共性,列举如下。

● 同一性:dxy)=0,同一点到自身的距离为0。此时,也可以写成x=y

● 非负性:dxy)≥0,距离不能小于0。

● 对称性:dxy)=dyx)。

● 直递性:dxy)≤dxz)+dzy)。

很明显,有多种函数可以同时满足上述条件,理论上,这些函数都可用于度量距离。但是,这些函数中的大部分在机器学习中并不常用。下面介绍机器学习中的常用距离。

欧氏距离(Euclidean Distance)是机器学习中最为常见的距离之一,它源自两点之间的距离公式。两个特征向量分别为

x=[x1x2,…,xnT

y=[y1y2,…,ynT

欧氏距离的计算公式如下。

dEuclideanxy)常写作‖xy‖。特别地,‖x‖表示x与原点之间的欧氏距离,‖x‖=

曼哈顿距离(Manhattan Distance)也可用于度量两点之间的距离。想象一下:你在曼哈顿街头,要开车从一个十字路口到另一个十字路口,实际的驾驶距离是这两个十字路口之间的直线距离吗?显然不是——除非你能穿越大楼。这里的实际驾驶距离就是曼哈顿距离。曼哈顿距离也称为城市街区距离(City Block Distance),其计算公式如下。

dManhattanxy)常写作|xy|。特别地,|x|表示x与原点之间的曼哈顿距离,即|x|=

在国际象棋棋盘上,国王可以朝8个方向移动。国王移动到目标点所需的步数就是切比雪夫距离(Chebyshev Distance)。切比雪夫距离用于计算各维度数值差中的最大值,计算公式如下。

dChebyshevxy)=max(|x1-y1|,|x2-y2|,…,|xn-yn|)

切比雪夫距离和曼哈顿距离的区别在于:在斜向移动时,曼哈顿距离所需的距离为2,切比雪夫距离所需的距离为1。

广义圆可以定义为到圆心距离相等的点的集合。使用以上三种距离画出来的“圆”,如图1-4所示。

图1-4

闵可夫斯基距离(Minkowski Distance)的计算公式如下。

其中,p是一个变参数。

闵可夫斯基距离公式是一个通项公式。以上介绍的三种距离其实都是闵可夫斯基距离的特例。

● 当p=1时,就是曼哈顿距离。

● 当p=2时,就是欧氏距离。

● 当p→∞时,就是切比雪夫距离。

以上三种距离都有一个缺点,就是容易受特征量纲的影响。例如,用一个2维特征表示人的体重和身高,体重的单位为千克,身高的单位为毫米,如[60,1700]T。此时,体重的数量级远小于身高,这会导致在计算距离时放大身高的作用。

我们以欧氏距离为例,讨论如何解决这个问题。对数据进行归一化,即将各个维度的均值和方差分别归一至(0,1),以消除量纲不同带来的差异。归一化在各个维度独立进行,公式如下。

σi为第i维特征所对应的标准差。修正后的距离计算公式如下。

上述距离称作标准化欧氏距离(Standardized Euclidean Distance)。

在提取特征时,特征之间并不是独立的,维度之间往往存在冗余。例如,体重和身高之间就存在较强的相关性。特征冗余带来的影响是:某些因素在各个维度重复出现,在计算距离时会被重复计算,从而使其影响被放大。为了降低特征冗余的影响,可以使用马氏距离(Mahalanobis Distance)进行计算,公式如下。

这里使用了向量的表示方式。Σ为各维度的协方差矩阵,其中,对角线元素表示各维度自身的方差,非对角线元素表示各维度之间的相关性。可以看出,对于马氏距离,如果不考虑特征之间的相关性(非对角线元素为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距离度量两个集合之间的差异,计算公式如下。

在这里,AB分别为这两个人看过的电影的集合,AB为这两个人看过的电影的交集,AB为这两个人看过的电影的并集。使用Jaccard距离进行计算,公式如下。

显然,此时dJaccard(user1,user2)<dJaccard(user1,user3),user1和user2的距离比较近,这也符合我们的认知。

Jaccard距离的用途很广,可用于度量购物偏好的差异、文章内容的差异等具有同质集合属性的特征。

在机器学习中,除了距离,也常使用相似度来度量两个向量。顾名思义,两个向量的相似度越高,说明它们越相似。因此,相似度和距离反相关。

余弦相似度(Cosine Similarity)是一种常见的相似度,其计算公式如下。

余弦相似度的值域是[-1,+1]。它用于衡量两个向量的夹角,夹角越小,两个向量就越相似。+1表示两个向量的相似度相同,即两个向量的方向完全相同(cos0=1)。-1则表示两个向量的方向完全相反(cosπ=-1),此时两个向量高度负相关。当余弦相似度为0时,两个向量是互相垂直的,称作正交。相互正交的向量彼此线性无关。

余弦相似度,如图1-5所示。

图1-5

可以看出,余弦相似度和向量的长度无关,它是用来衡量各个维度比例的相似性的。当两个向量各个维度的比例相同时,它们的夹角为0,相似度为1。

称为向量xy的内积,记作。内积可以理解成未归一化的余弦相似度,值域为(-∞,+∞),有时也用于度量向量的相似性。‖x‖为归一化因子,用于将向量x的长度归一至1。相比较而言,cos(xy)只考虑了xy的角度差,〈xy〉则综合考虑了xy的角度差与长度差。

有时需要将余弦相似度转换为余弦距离,公式如下。

dcosxy)=1-cos(xy

特别地,当‖x‖=1、‖y‖=1时,dcosxy)和dEuclideanxy)有如下关系。

即欧氏距离和余弦相似度之间存在单调关系。