欧式距离和马氏距离的关系(公式推导)

本文详细解析了欧氏距离和马氏距离的概念及应用,对比了两者在衡量样本间距离上的区别,特别是在考虑数据分布特性时马氏距离的优势。

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

欧氏距离
  1. 度量样本和样本分布间的距离d(x,μ)=(x−μ)T(x−μ) \begin{aligned} d(x,\mu)=\sqrt{(x-\mu)^T(x-\mu)} \end{aligned} d(x,μ)=(xμ)T(xμ) 其中x=(x1,x2,…,xn)Tx=(x_1,x_2,…,x_n)^Tx=(x1,x2,,xn)T是n维向量,μ=(μ1,μ2,…,μn)T\mu=(\mu_1,\mu_2,…,\mu_n)^Tμ=(μ1,μ2,,μn)T是样本分布的中心,即 d(x,μ)=∑i=1n(xi−μi)2 \begin{aligned} d(x,\mu)=\sqrt{\sum_{i=1}^n(x_i-\mu_i)^2} \end{aligned} d(x,μ)=i=1n(xiμi)2
  2. 度量样本和样本的距离 d(x,y)=(x−y)T(x−y) \begin{aligned} d(x,y)=\sqrt{(x-y)^T(x-y)} \end{aligned} d(x,y)=(xy)T(xy) 其中,x=(x1,x2,…,xn)Tx=(x_1,x_2,…,x_n)^Tx=(x1,x2,,xn)Ty=(y1,y2,…,yn)Ty=(y_1,y_2,…,y_n)^Ty=(y1,y2,,yn)T均为n维向量,即d(x,y)=∑i=1n(xi−yi)2 \begin{aligned} d(x,y)=\sqrt{\sum_{i=1}^n(x_i-y_i)^2} \end{aligned} d(x,y)=i=1n(xiyi)2
协方差
  1. 对于m个一维数据(x1,x2,…,xm)(x_1,x_2,…,x_m)(x1,
### 欧式距离马氏距离的概念 #### 欧式距离 欧式距离是最常见的两点间直线距离,在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、付费专栏及课程。

余额充值