欧式距离、标准化欧式距离、马氏距离、余弦距离

本文详细介绍了五种常用的距离度量方法,包括欧氏距离、标准化欧氏距离、马氏距离、余弦距离及汉明距离等,并探讨了各自的适用场景及优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录
  • 欧氏距离
  • 标准化欧氏距离
  • 马氏距离
  • 夹角余弦距离
  • 汉明距离
  • 曼哈顿(Manhattan)距离
1.欧式距离

欧式距离源自N维欧氏空间中两点 x 1 , x 2 x_1,x_2 x1,x2间的距离公式:
d = ∑ i = 1 N ( x 1 i − x 2 i ) 2 d = \sqrt{\sum_{i=1}^N(x_{1i}-x_{2i})^2} d=i=1N(x1ix2i)2

2.标准化欧式距离(Standardized Euclidean distance)

引入标准化欧式距离的原因是一个数据 x i x_i xi的各个维度之间的尺度不一样。
【对于尺度无关的解释】如果向量中第一维元素的数量级是100,第二维的数量级是10,比如v1=(100,10),v2 = (500,40),则计算欧式距离
d = 100 ⋅ ( 5 − 1 ) 2 + 10 ∗ ( 4 − 1 ) 2 d = \sqrt{100\cdot(5-1)^2+10*(4-1)^2} d=100(51)2+10(41)2

可见欧式距离会给与第一维度100权重,这会压制第二维度的影响力。对所有维度分别进行处理,使得各个维度的数据分别满足标准正态分布:
x i ′ = x i − u i s i x'_i = \frac{x_i-u_i}{s_i} xi=sixiui
u i u_i ui是该维度所有数据的均值, s i s_i si是对应方差。
然后在对 x ′ x' x进行欧式距离:
d = ∑ i = 1 N ( x i − y i ) 2 s i 2 d = \sqrt{\sum_{i =1}^N \frac{(x_i-y_i)^2}{s_i^2}} d=i=1Nsi2(xiyi)2

网络上的Normalized Euclidean distance和Standard Euclidean distance的定义对应这两种处理。

3.马氏距离

马氏距离又称为数据的协方差距离,它是一种有效的计算两个未知样本集的相似度的方法。马氏距离的结果也是将数据投影到N(0,1)区间并求其欧式距离,与标准化欧氏距离不同的是它认为各个维度之间不是独立分布的,所以马氏距离考虑到各种特性之间的联系

假设 u x u_x ux为向量 X = { x 1 , x 2 , . . . , x N } X = \{x_1,x_2,...,x_N\} X={x1,x2,...,xN}的均值, u y u_y uy Y = { y 1 , y 2 , . . . y N } Y = \{y_1,y_2,...y_N\} Y={y1,y2,...yN}的均值, Σ \Sigma Σ 是X与Y的协方差
点X与Y的马氏距离:
( x − u x ) T Σ − 1 ( y − u y ) \sqrt{(x-u_x)^T\Sigma^{-1}(y-u_y)} (xux)TΣ1(yuy)
这个式子可以用矩阵的迹来重写:
( x − u x ) T Σ − 1 ( y − u y ) = t r ( Σ − 1 ( y − u y ) ( x − u x ) T \sqrt{(x-u_x)^T\Sigma^{-1}(y-u_y)}=\sqrt{tr(\Sigma ^{-1} (y-u_y)(x-u_x)^T} (xux)TΣ1(yuy) =tr(Σ1(yuy)(xux)T
其中 Σ \Sigma Σ是X与Y的协方差矩阵
可见:
如果 Σ \Sigma Σ是单位矩阵,则马氏距离退化成欧式距离;
如果 Σ \Sigma Σ是对角矩阵,则称为归一化后的欧式距离。
所以马氏距离的特点:

  • 尺度无关
  • 考虑进数据之间的联系

马氏距离可以通过协方差自动生成相应的权重,而使用逆则抵消掉这些权重。

最典型的就是根据距离作判别问题,即假设有n个总体,计算某个样品X归属于哪一类的问题。此时虽然样品X离某个总体的欧氏距离最近,但是未必归属它,比如该总体的方差很小,说明需要非常近才能归为该类。对于这种情况,马氏距离比欧氏距离更适合作判别

4.余弦距离(余弦相似性)

严格来讲余弦距离不是距离,而只是相似性。其他距离直接测量两个高维空间上的点的距离,如果距离为0则两个点“相同”;余弦的结果为在 [ 0 , 1 ] [0,1] [01]之中,如果为 1,只能确定两者完全相关、完全相似。

假设两用户同时对两件商品评分,向量分别为(3,3)和(5,5),这两位用户对两件商品的喜好其实是一样的,余弦距离此时为1,欧式距离给出的解显然没有余弦值直观。

相对于标准化后的欧式距离,余弦距离少了将数据投影到一个均值为0的区间里这一步骤。对于点X和点Y,其余弦距离:
d = ∑ i = 1 N x i y i ∑ i N x i 2 ∑ i N y i 2 d = \frac{\sum_{i=1}^{N}x_iy_i}{\sqrt{\sum_i^N {x_i^2}}\sqrt{\sum_i^N y_i^2}} d=iNxi2 iNyi2 i=1Nxiyi
余弦距离在给文本分类的词袋模型中使用,例如给一篇文章一共出现过6000个词,则用一个6000维度的向量X表示这篇文章,每个维度代表各个字出现的数目;另外一篇文章也恰好只出现过这6000字,用向量Y表示该文章,则这两篇文章相似度可以用余弦距离来测量。

优点:余弦距离根据向量方向来判断向量相似度,与向量各个维度的相对大小有关,不受各个维度直接数值影响。
某种程度上,归一化后的欧氏距离和余弦相似性表征能力相同。

5.汉明距离

汉明距离是两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。比如:
1011101 与 1001001 为 2
2143896 与 2233796 是 3
可以把它看做将一个字符串变换成另外一个字符串所需要替换的字符个数。
此外,汉明重量是字符串相对于同样长度的零字符串的汉明距离,如:
11101 的汉明重量是 4。
所以两者间的汉明距离等于它们汉明重量的差a-b

6.曼哈顿距离 (Manhattan distance)

曼哈顿距离的定义如下:
∑ p ∣ ∣ I 1 p − I 2 p ∣ ∣ \sum_p||I_1^p-I_2^p|| pI1pI2p
p是I的维度。当I为图像坐标时,曼哈顿距离即是x,y坐标距离之和。

【补充】协方差矩阵的逆 Σ − 1 \Sigma^{-1} Σ1的求法:

先将 Σ \Sigma Σ进行SVD分解(由于协方差矩阵是对称矩阵,因此此处严格说来是特征值分解EVD)。

由于协方差矩阵是对称的,
U Λ V T = Σ = Σ T = ( U Λ V T ) T = V Λ U T U\Lambda V^T = \Sigma = \Sigma^T =(U\Lambda V^T)^T = V\Lambda U^T UΛVT=Σ=ΣT=(UΛVTT=VΛUT
V = U n × n = [ u 1 , u 2 , . . . , u n ] V = U_{n\times n} = [u_1,u_2,...,u_n] V=Un×n=[u1,u2,...,un]
因此SVD分解结果:
Σ = U Λ U T = ∑ i = 1 n λ i u i u i T \Sigma =U \Lambda U^T = \sum_{i=1}^n\lambda_i u_i u_i^T Σ=UΛUT=i=1nλiuiuiT
则:
Σ − 1 = ( U T ) − 1 Λ − 1 U − 1 = U Λ − 1 U T = ∑ i = 1 n λ i − 1 u i u i T \Sigma ^{-1} = (U^T)^{-1}\Lambda^{-1} U^{-1} = U\Lambda^{-1} U^T = \sum_{i=1}^n\lambda_i^{-1} u_i u_i^T Σ1=(UT)1Λ1U1=UΛ1UT=i=1nλi1uiuiT
因此马氏距离:
d = ( x i − u x ) Σ − 1 ( y i − u y ) T d = (x_i-u_x)\Sigma^{-1}(y_i-u_y)^T d=(xiux)Σ1(yiuy)T

= ( x i − u x ) ( ∑ i = 1 n λ i − 1 u i u i T ) ( y i − u y ) T = (x_i-u_x)(\sum_{i=1}^n\lambda_i^{-1} u_i u_i^T)(y_i-u_y)^T =(xiux)(i=1nλi1uiuiT)(yiuy)T

= ∑ i = 1 N λ i ( x i − u x ) u i u i T ( y i − u y ) T = \sum_{i=1}^N\lambda_i(x_i-u_x)u_iu_i^T(y_i-u_y)^T =i=1Nλi(xiux)uiuiT(yiuy)T

= ∑ i = 1 N p i q i = \sum_{i=1}^Np_iq_i =i=1Npiqi
上式中,由于U是正交矩阵,可以将其视作旋转矩阵,对向量X,Y进行旋转;再对其除以特征值,可以视作尺度处理。这两者的结果就是将数据处理旋转并缩放到一个标准化的空间里去。

Reference:

[1]马氏距离及其几何解释
http://www.weixinnu.com/tag/article/1082683923
[2]欧氏距离和余弦相似度的区别是什么?
https://www.zhihu.com/question/19640394

### 不同距离度量方法的优缺点 #### 欧氏距离 (Euclidean Distance) 优点在于直观易懂,适用于低维度空间中的相似性测量。然而,在高维数据下容易受到“维度灾难”的影响,即随着特征数量增加,样本间的真实差距被稀释。 对于欧氏距离而言,其计算简单快捷,适合处理数值型属性的数据集。但在实际应用中,当各维度的重要性存在差异时,该方法未能体现这些权重区别对待的要求[^2]。 ```matlab % 计算欧氏距离 X = [1 2; 1 3; 2 2; 3 1]; d_euclidean = pdist(X, 'euclidean'); disp(d_euclidean); ``` #### 曼哈顿距离 (Manhattan Distance) 曼哈顿距离也被称为城市街区距离或L1范数,它表示两点之间沿坐标轴方向上的绝对差之和。相比欧氏距离更贴近于现实世界某些场景下的路径长度描述,比如网格状布局的城市交通网络分析等问题上更为适用。 不过,由于只考虑直角转弯而忽略斜线移动的可能性,因此可能无法很好地反映物理空间内的最短路线情况。 ```matlab % 计算曼哈顿距离 X = [1 2; 1 3; 2 2; 3 1]; d_manhattan = pdist(X, 'cityblock'); % cityblock代表曼哈顿距离 disp(d_manhattan); ``` #### 斯皮尔曼等级相关系数(Spearman Rank Correlation Coefficient) 此指标用于评估两个变量之间的单调关系强度而非线性关联程度。特别之处在于先对原始观测值进行排序转换成秩次后再求解皮尔逊积矩相关系数从而获得最终结果。这种方式使得即使原数据分布不符合正态假设也能有效工作。 需要注意的是,利用MATLAB内置函数`corrcoef()`来直接获取斯皮尔曼rho值前需确保输入参数形式正确——应为列向量格式[^1]。 ```matlab % 假设已有两组数据作为列向量存储在矩阵R内 R = rand(10, 2); % 这里仅作示意生成随机测试用例 [Rank_X, ~] = tiedrank(R(:, 1)); % 对每列分别做排名操作 [~, Rank_Y] = tiedrank(R(:, 2)); spearman_rho = corrcoef(Rank_X', Rank_Y')(1, 2); disp(spearman_rho); ``` #### 马氏距离(Mahalanobis Distance) 马氏距离能够克服传统欧式测度受单位制变化的影响以及多维空间中不同尺度特征相互作用带来的偏差问题。通过引入协方差矩阵的概念实现了标准化过程,进而提高了模型鲁棒性和泛化能力。但是这也意味着需要额外估计群体统计特性,并且要求样本容量足够大以保证协方差阵可逆性良好。 ```matlab % 使用给定的例子展示如何调用pdist()函数计算马氏距离 X = [1 2; 1 3; 2 2; 3 1]; d_mahalanobis = pdist(X, 'mahalanobis'); disp(d_mahalanobis); ``` #### 余弦相似度(Cosine Similarity) 余弦相似度主要用于文本挖掘等领域,用来判断文档间的语义相近程度。相比于其他基于几何位置的距离度量法来说更加关注角度而不是具体的位置信息。这意味着即便两个对象相距甚远但如果它们的方向几乎一致也会被认为是非常接近的。此外,这种方法不受限于矢量模长大小的影响,非常适合处理具有高度偏斜分布特性的数据集合。 ```matlab % 构造简单的例子说明cosine distance 的 matlab 实现方式 A = [1 2 3]'; B = [4 5 6]'; similarity_cosine = dot(A,B)/(norm(A)*norm(B)); distance_cosine = acos(similarity_cosine)/pi*180; fprintf('The cosine distance between A and B is %.2f degrees.\n', distance_cosine); ```
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值