欧式距离和马式距离的区别

article/2025/9/15 4:34:19

前言

为什么要讨论这两个距离之间的区别?

因为,距离函数的选择对数据挖掘算法的效果具有很大的影响,使用错误的距离函数对挖掘过程非常有害。有时候,语义非常相似的对象被认为不相似,而语义不相似的对象却被认为是相似的,这都是因为距离函数选择不佳导致的。这篇文章就是想告诉大家欧式距离不是万能的,距离函数的选择应该随应用场景而定。

欧式距离

设有两个n维数据点 X = ( x 1 , x 2 , . . . , x n ) X=(x_1,x_2,...,x_n) X=(x1,x2,...,xn) Y = ( y 1 , y 2 , . . . , y n ) Y=(y_1,y_2,...,y_n) Y=(y1,y2,...,yn)之间的欧几里得距离为:
D i s t ( X , Y ) = ∑ i = 1 n ( x i − y i ) 2 = ( X − Y ) ( X − Y ) T \begin{aligned} Dist(X,Y)=\sqrt{\sum\limits_{i=1}^n(x_i-y_i)^2}=\sqrt{(X-Y)(X-Y)^T} \end{aligned} Dist(X,Y)=i=1n(xiyi)2 =(XY)(XY)T
欧式距离表示的是两点之间的直线距离,它有个很好的性质就是旋转不变性,即两点之间的距离不会因为坐标轴的改变而改变。然而,欧式距离受到数据分布、噪声、高维度和特征度量标准的影响,效果并不太好。

马氏距离

设有 n × m n×m n×m维数据集D,令 S ∈ S\in S R m × m R^{m×m} Rm×m为数据集D的协方差矩阵, X 、 Y X、Y XY是数据集D中的任意两行,两个m维行向量的马哈拉诺比斯距离为:
D i s t ( X , Y ) = ( X − Y ) S − 1 ( X − Y ) T \begin{aligned} Dist(X,Y)=\sqrt{(X-Y)S^{-1} (X-Y)^T} \end{aligned} Dist(X,Y)=(XY)S1(XY)T
马氏距离不受量纲的影响,即数据测量的单位;也不受数据属性相关性的影响。显然地,若 S − 1 = E S^{-1}=E S1=E,马氏距离退化为欧式距离。从此可以看出,马氏距离和欧式距离地区别全是因为协方差矩阵S。那么,马氏距离中的 S − 1 S^{-1} S1到底有什么用?我们看下列证明:

1.根据PCA原理,协方差矩阵进行特征分解能找到消除属性相关性后的基坐标: S = Q Λ Q T S=Q\varLambda Q^T S=QΛQT, Q Q Q的正交列是消除属性相关性的基坐标。

2.坐标旋转后的数据集 F = D Q F=DQ F=DQ,而 D D D的行向量X转换后 F X = X Q T = Q X T F_X=XQ^T=QX^T FX=XQT=QXT

3.F的协方差矩阵:
S F = 1 n F T F − u F T u F = Q T D T D n Q − Q T u D T u D Q = Q T S Q = Λ S_F=\frac{1}{n}F^TF-u_F^Tu_F=Q^T\frac{D^TD}{n}Q-Q^Tu_D^Tu_DQ=Q^TSQ=\varLambda SF=n1FTFuFTuF=QTnDTDQQTuDTuDQ=QTSQ=Λ
故而, Λ \varLambda Λ的对角元素 λ i \lambda_i λi是坐标旋转后F第i个属性的最大化方差。

4.反向推导马氏公式
d 2 ( X , Y ) = ( X − Y ) S − 1 ( X − Y ) T = ( X − Y ) Q T Q S − 1 Q T Q ( X − Y ) T = ( X − Y ) Q T ( Q T S Q ) − 1 Q ( X − Y ) T = ( F X − F Y ) Λ − 1 ( F X − F Y ) T ( 令 f = F X , h = F Y ) = ( f 1 − h 1 , f 2 − h 2 , . . . , f m − h m ) ( 1 λ 1 1 λ 2 . . . 1 λ m ) ( f 1 − h 1 f 2 − h 2 . . . f m − h m ) = ( f 1 − h 1 λ 1 ) 2 + ( f 2 − h 2 λ 2 ) 2 + . . . + ( f m − h m λ m ) 2 \begin{aligned} d^2(X,Y)=&(X-Y)S^{-1}(X-Y)^T \\=&(X-Y)Q^TQS^{-1}Q^TQ(X-Y)^T \\=&(X-Y)Q^T(Q^TSQ)^{-1}Q(X-Y)^T \\=&(F_X-F_Y)\varLambda^{-1}(F_X-F_Y)^T\text(令f=F_X,h=F_Y) \\=&(f_1-h_1,f_2-h_2,...,f_m-h_m)\begin{pmatrix} \frac{1}{\lambda_1} & & &\\ &\frac{1}{\lambda_2} &&\\&&...&\\&&&\frac{1}{\lambda_m} \end{pmatrix}\begin{pmatrix}f_1-h_1\\f_2-h_2\\...\\f_m-h_m \end{pmatrix} \\=&(\frac{f_1-h_1}{\lambda_1})^2+(\frac{f_2-h_2}{\lambda_2})^2+...+(\frac{f_m-h_m}{\lambda_m})^2 \end{aligned} d2(X,Y)======(XY)S1(XY)T(XY)QTQS1QTQ(XY)T(XY)QT(QTSQ)1Q(XY)T(FXFY)Λ1(FXFY)T(f=FX,h=FY)(f1h1,f2h2,...,fmhm)λ11λ21...λm1f1h1f2h2...fmhm(λ1f1h1)2+(λ2f2h2)2+...+(λmfmhm)2

综上所述,马氏距离引入协方差矩阵后实现了两个步骤:坐标旋转和数据压缩。坐标旋转是为了消除属性间相关性的干扰(类似PCA);数据压缩是将坐标差值除以方差,进行了归一化。因为这两个步骤,马氏距离消除了数据分布和特征量纲的影响,这是区别于欧式距离的地方。

两者区别

1.欧式距离受数据分布的影响,马氏距离不会

欧式距离只却决于两个点,与其他数据的全局统计性质无关,这毫无疑问是片面的,数据距离应该依赖于全局数据的影响。如下图所示,A的坐标是(-8,4)而B的坐标是(8,4)。毫无疑问,A、B到原点的欧式距离是相同的,那么我们能简单的认为它们与原点O等距吗?答案是不行的。实际上,数据在OB方向上具有较大差异性,是高方差方向。数据在OA方向上很稀疏,是低方差方向。 根据马氏距离除以方差的特性,B到原点的距离是更小的,A到原点的距离是更大的,而这种判断才是合理的。
在这里插入图片描述
2.欧氏距离受特征的量纲影响,马氏距离不会

现有两个人张三和李四,他们的身高和体重分别是(170cm,60000g)和(169cm,59000g)。从语义上看张三和李四是很相似的。然而,欧式距离受到g这个单位的影响,两者之间的欧式距离非常大,(60000-59000)2 这个数据非常大使得几乎忽略了身高数据的影响,结果会被误判为非常不相似。而马氏距离除以方差进行了归一化,体重数据间的差异在数值上被缩小,这样才是合理的。


http://chatgpt.dhexx.cn/article/Zo116pP4.shtml

相关文章

马氏距离(Mahalanobis Distance)与欧式距离

马氏距离(Mahalanobis Distance)是度量学习中一种常用的距离指标,同欧氏距离、曼哈顿距离、汉明距离等一样被用作评定数据之间的相似度指标。但却可以应对高维线性分布的数据中各维度间非独立同分布的问题。 什么是马氏距离 马氏距离(Mahalanobis Distance)是一种距…

欧式距离分割

主要函数: [labels, numClusters] pcsegdist(ptCloud, minDistance) 欧式聚类是一种基于欧式距离的聚类算法 ptCloud pcread(maize.pcd);%两个不同簇之间最小距离 minDistance 0.06%执行欧式距离分割 [labels, numClusters] pcsegdist(ptCloud, minDistance)…

欧式距离转为百分比

1. 说明 项目中生成了每个数据的2048维的向量,计算出不同数据之间的欧式距离值。把这些欧式距离转化为百分比,利于查看。 2. 欧式距离值 0.19806965771678278 0062_04 0.34178271687627493 0062_00 0.35060763229637537 0062_03 0.4269194352275009 00…

马氏距离和欧式距离详解

一般在机器学习模型中会涉及到衡量两个样本间的距离,如聚类、KNN,K-means等,使用的距离为欧式距离。其实,除了欧氏距离之外,还有很多的距离计算标准,本文主要介绍欧氏距离和马氏距离。 欧氏距离 最常见的两…

PCL 的欧式距离聚类

PCL 的欧式距离聚类 (感谢前辈) 转自:https://zhuanlan.zhihu.com/p/75117664 聚类代码如下: from paper_1_v0.my_ransac import my_ransac_v5 import numpy as npimg_id 1 # 这里读入你的kitti 雷达数据即可 path rD:\KITT…

相似度计算(3)——欧式距离和闵克夫斯基距离

欧式距离和闵克夫斯基距离 一、欧式距离 1、定义 欧式距离(欧几里得距离,欧几里得度量),是一个通常采用的距离定义,指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离…

机器学习:欧氏距离(Euclidean Distance)

相关文章链接:算法文章汇总 欧式距离也称欧几里得距离,是最常见的距离度量,衡量的是多维空间中两个点之间的 绝对距离 。 以古希腊数学家欧几里得命名的距离,也就是我们直观的两点之间直线最短的直线距离。 欧氏距离定义&#…

距离度量 —— 欧式距离(Euclidean Distance)

Python学习系列文章:👉 目录 👈 文章目录 一、概述二、计算公式① 二维平面上的欧式距离② 三维空间上的欧式距离③ n维空间上的欧式距离 一、概述 欧式距离,也称为 欧几里得距离,是我们从小学、初中、高中等等乃至现…

[机器学习-概念] 什么是欧式距离、标准化欧式距离、马氏距离、余弦距离

1.欧式距离(Euclidean Distance) 欧式距离源自N维欧氏空间中两点 x 1 , x 2 x_1,x_2 x1​,x2​间的距离公式: 2.标准化欧式距离(Standardized Euclidean distance) 引入标准化欧式距离的原因是一个数据 x i x_i xi​ 的各个维度之间的尺…

PHPStorm使用PHP7新特性出现红色波浪错误

今天在项目中使用PHP7新特性时PHPStorm出现了如下红色错误,看着让人很不舒服,明明没有错 本地配置LNMP的PHP版本是7.2所以不是安装的PHP版本过低的问题,而是PHPStorm默认支持的PHP版本语法问题,通过在偏好设置中查看发现默认是PHP…

PHP8.X的新特性

PHP8.X的新特性 随着2020年的PHP开发者峰会结束,8.X将在11月26发布 一、JIT JIT的新特性,则是将PHP代码转化为传统的机器码,而并非通过zend虚拟机来运行,这大大增加了运行速度。但是缺点是向下不兼容。 # JIT 可以通过php.ini中…

PHP 7.4 新特性

PHP 7.4 计划在2019年11月21日发布,它主要新增了以下几个特性: 短闭包函数 短闭包函数可以减少冗余代码: array_map(function (User $user) { return $user->id; }, $users) array_map(fn(User $user) > $user->id, $users) 需要…

PHP7.0至PHP8部分特性总结

PHP7.0特性 2015年6月11日,PHP开发团队宣布将立即提供PHP 7.0.0 Alpha1。此版本标志着PHP 7主要系列的开始。我们有许多原因,应该对PHP7.0感到兴奋,接下来让我们来看一下它全新的语言特性! 性能: PHP7.0采用下一代由PHP核心团队开…

php8新特性全览【超详细】

题外话: PHP 8.0 是 PHP 语言的重大更新。 它包含许多新功能和优化,包括命名参数、联合类型、属性、构造函数属性提升、匹配表达式、空安全运算符、JIT,以及类型系统、错误处理和一致性方面的改进。 废话不多说,开车 1.便利的命名…

php 7新特性(一):类型的限定

1、标量类型声明: a.默认:以前的弱类型 b.严格:declare(strict_types1) //strict_types的值(1或者0),1表示严格类型, 0表示弱类型 可以使用的类型参数有:int float bool string inte…

PHP8所有新特性

PHP 8 正式版即将发布,是时候来看看 PHP 8 即将推出的新特性了 首先来安装PHP8 下载地址 https://www.php.net/downloads 本地编译安装 PHP 8 RC2 版本(MAC操作系统) # 0、下载解压源码 wget https://downloads.php.net/~pollita/php-8.0.0RC2.tar.gz tar zxvf p…

PHP8新特性解读

本文主要内容为解读PHP8.0的主要新特性 解读PHP8特性 前言一、给小皮面板下载PHP8二、部分下载PHP8会出现502解决方案三、介绍特性1. 联合类型2. 匹配表达式3. null安全运算符4. 构造函数属性提升5. 注解6. 命名参数 四、总结 前言 PHP8在2020年11月26日正式发布,又…

PHP 7 新特性

转载自: https://zhuanlan.zhihu.com/p/27694633 https://zhuanlan.zhihu.com/p/27847880 https://zhuanlan.zhihu.com/p/29478077 https://goghcrow.gitbooks.io/php7/content/xin-te-xing.html PHP 7 之前的类型提示 PHP 5.0 首次提出函数参数&#xff08…

php7 新特性整理

PHP7 已经出来1年了,PHP7.1也即将和大家见面,这么多好的特性,好的方法,为什么不使用呢,也希望PHP越来越好。 在这里整理 PHP 5.1 ,PHP5.2,PHP5.3,PHP5.4,PHP5.5,PHP5.6 ,PHP7,PHP7.1 所有新特性&#xff0…

PHP 7 新特性 - 收集

前言 最好的语言发布了新的版本,一个划时代的大版本:PHP7。 PHP7修复了大量BUG,新增了功能和语法糖。这些改动涉及到了核心包、GD库、PDO、ZIP、ZLIB等熟悉和不熟悉的核心功能与扩展包。 PHP7移除了已经被废弃的函数,如mysql_系…