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

一、 欧氏距离( Euclidean distance)

一个通常采用的距离定义,它是在m维空间中两个点之间的真实距离。在二维和三维空间中的欧式距离的就是两点之间的距离,

二维空间的公式

0ρ = sqrt( (x1-x2)^2+(y1-y2)^2 ) |x| = √( x2 + y2 )

三维空间的公式

0ρ = √( (x1-x2)2+(y1-y2)2+(z1-z2)2 ) |x| = √( x2 + y2 + z2 )

n维空间的公式

n维欧氏空间是一个点集,它的每个点 或向量 x 可以表示为 (x[1],x[2],…,x[n]) ,其中 x[i](i = 1,2,…,n) 是实数,称为 X 的第i个坐标
两个点 A = (a[1],a[2],…,a[n]) 和 B = (b[1],b[2],…,b[n]) 之间的距离 ρ(AB) 定义为下面的公式:
ρ(AB) =√ [ ∑( a[i] - b[i] )2 ] (i = 1,2,…,n)
向量 x = (x[1],x[2],…,x[n]) 的自然长度 |x| 定义为下面的公式:
|x| = √( x[1]2 + x[2]2 + … + x[n]2 )
缺点:它将样品的不同属性(即各指标或各变量)之间的差别等同看待,这一点有时不能满足实际要求。例如,在教育研究中,经常遇到对人的分析和判别,个体的不同属性对于区分个体有着不同的重要性。因此,有时需要采用不同的距离函数。 
二、马氏距离

马氏距离是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示数据的协方差距离。它是一种有效的计算两个未知样本集的相似度的方法。与欧式距离不同的是它考虑到各种特性之间的联系(例如:一条关于身高的信息会带来一条关于体重的信息,因为两者是有关联的),并且是尺度无关的(scale-invariant),即独立于测量尺度。

马氏距离不受量纲的影响,两点之间的马氏距离与原始数据的测量单位无关;由标准化数据和中心化数据(即原始数据与均值之差)计算出的二点之间的马氏距离相同。马氏距离还可以排除变量之间的相关性的干扰。它的缺点是夸大了变化微小的变量的作用。

在统计学与概率论中,协方差矩阵(或称共变异矩阵)是一个矩阵,其每个元素是各个向量元素之间的方差。这是从标量随机变量到高维度随机向量的自然推广。

假设X是以n个标量随机变量组成的列向量(一个列向量代表一个变量,而不是一个记录)
X = \begin{bmatrix}X_1 \\ \vdots \\ X_n \end{bmatrix}

并且μi 是其第i个元素的期望值, 即, μi = E(Xi)。协方差矩阵被定义的第i,j项是如下协方差:



 \Sigma_{ij} = \mathrm{cov}(X_i, X_j) = \mathrm{E}\begin{bmatrix} (X_i - \mu_i)(X_j - \mu_j) \end{bmatrix}

即:

 \Sigma=\mathrm{E} \left[ \left( \textbf{X} - \mathrm{E}[\textbf{X}] \right) \left( \textbf{X} - \mathrm{E}[\textbf{X}] \right)^\top \right]
 = \begin{bmatrix} \mathrm{E}[(X_1 - \mu_1)(X_1 - \mu_1)] & \mathrm{E}[(X_1 - \mu_1)(X_2 - \mu_2)] & \cdots & \mathrm{E}[(X_1 - \mu_1)(X_n - \mu_n)] \\ \ \mathrm{E}[(X_2 - \mu_2)(X_1 - \mu_1)] & \mathrm{E}[(X_2 - \mu_2)(X_2 - \mu_2)] & \cdots & \mathrm{E}[(X_2 - \mu_2)(X_n - \mu_n)] \\ \ \vdots & \vdots & \ddots & \vdots \\ \ \mathrm{E}[(X_n - \mu_n)(X_1 - \mu_1)] & \mathrm{E}[(X_n - \mu_n)(X_2 - \mu_2)] & \cdots & \mathrm{E}[(X_n - \mu_n)(X_n - \mu_n)] \end{bmatrix}

矩阵中的第(i,j)个元素是Xi与Xj的协方差。这个概念是对于标量随机变量方差的一般化推广。
尽管协方差矩阵很简单,可它却是很多领域里的非常有力的工具。它能导出一个变换矩阵,这个矩阵能使数据完全去相关(decorrelation)。从不同的角度看,也就是说能够找出一组最佳的基以紧凑的方式来表达数据。(完整的证明请参考瑞利商)。 这个方法在统计学中被称为主成分分析(principal components analysis),在图像处理中称为Karhunen-Loève 变换(KL-变换)。


注意:

1)马氏距离的计算是建立在总体样本的基础上的,这一点可以从上述协方差矩阵的解释中可以得出,也就是说,如果拿同样的两个样本,放入两个不同的总体中,最后计算得出的两个样本间的马氏距离通常是不相同的,除非这两个总体的协方差矩阵碰巧相同;
2)在计算马氏距离过程中,要求总体样本数大于样本的维数,否则得到的总体样本协方差矩阵逆矩阵不存在,这种情况下,用欧式距离来代替马氏距离,也可以理解为,如果样本数小于样本的维数,这种情况下求其中两个样本的距离,采用欧式距离计算即可。
3)还有一种情况,满足了条件总体样本数大于样本的维数,但是协方差矩阵的逆矩阵仍然不存在,比如A(3,4),B(5,6);C(7,8),这种情况是因为这三个样本在其所处的二维空间平面内共线(如果是大于二维的话,比较复杂???)。这种情况下,也采用欧式距离计算。
4)在实际应用中“总体样本数大于样本的维数”这个条件是很容易满足的,而所有样本点出现3)中所描述的情况是很少出现的,所以在绝大多数情况下,马氏距离是可以顺利计算的,但是马氏距离的计算是不稳定的,不稳定的来源是协方差矩阵,这也是马氏距离与欧式距离的最大差异之处。

### 欧式距离马氏距离的概念 #### 欧式距离 欧式距离是最常见的两点间直线距离,在n维空间中,如果存在两个点 \( A(x_1, y_1,...,z_1) \) \( B(x_2,y_2,...,z_2) \),那么它们之间的欧几里得距离可以通过下面的公式计算: \[ d_{Euclidean}(A,B)=\sqrt{(x_2-x_1)^2+(y_2-y_1)^2+...+(z_2-z_1)^2} \] 该度量方法简单直观,适用于各维度相互独立的情况。 #### 马氏距离 相比之下,马氏距离考虑到了各个变量间的协方差影响。设有一个随机向量X=[\( X_1,X_2,\ldots ,X_p \)]T服从多元正态分布N(μ,Σ),则任意一点P到均值μ的马哈拉诺比斯距离定义为: \[ D_M(P)=(X-\mu )^{T}\Sigma ^{-1}(X-\mu ). \] 这里Σ表示协方差矩阵[^1]。 ### 应用场景对比 - **欧式距离的应用** - 当数据集中各属性之间不存在线性相关性或者关联较弱时适用; - 计算简便快速,适合大规模数据分析; - **马氏距离的优势** - 能够处理具有不同尺度以及可能存在相关性的多维特征; - 对于受噪声干扰较大的情况更为稳健; - 常用于模式识别领域内的分类器设计当中,尤其是在生物统计学等领域有着广泛的应用价值。 综上所述,选择何种距离测度取决于具体问题背景下的特性需求。当面对复杂结构化数据集时,考虑到其内部可能存在的依赖关系,通常推荐优先尝试使用马氏距离进行建模分析。 ```python import numpy as np from scipy.spatial.distance import mahalanobis, euclidean def calculate_distances(point_a, point_b, cov_matrix=None): """ Calculate both Euclidean and Mahalanobis distances between two points. Parameters: point_a (array-like): First data point of shape (n_features,) point_b (array-like): Second data point of same shape as `point_a` cov_matrix (ndarray or NoneType): Covariance matrix used for calculating the Mahalanobis distance Returns: tuple: Pair containing float values representing respectively the Euclidean and Mahalanobis distances """ euc_dist = euclidean(point_a, point_b) if cov_matrix is not None: inv_covmat = np.linalg.inv(cov_matrix) maha_dist = mahalanobis(point_a, point_b, inv_covmat) else: maha_dist = None return euc_dist, maha_dist # Example usage with random data generation np.random.seed(42) data_points = np.random.multivariate_normal([0, 0], [[1, .8], [.8, 1]], size=100).T cov_mat = np.corrcoef(data_points) example_point_pair = ([.5,.6],[-.3,-.9]) eudist,mahdist = calculate_distances(*example_point_pair,cov_mat) print(f'Euclidean Distance:{eudist:.3f}') if mahdist is not None: print(f'Mahalanobis Distance:{mahdist:.3f}') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值