欧式距离与马氏距离比较

最近在研究BM3D算法,常用的是欧式距离,但是欧式距离缺点较多,查阅资料后,找到了马氏距离,因此,转载记录此篇,便于之后的学习。

欧氏距离(Euclidean distance)也称欧几里得度量、欧几里得度量,是一个通常采用的距离定义,它是在m维空间中两个点之间的真实距离。在二维和三维空间中的欧氏距离的就是两点之间的距离。

缺点:就大部分统计问题而言,欧氏距离是不能令人满意的。(每个坐标对欧氏距离的贡献是同等的。当坐标表示测量值时,它们往往带有大小不等的随机波动,在这种情况下,合理的方法是对坐标加权,使变化较大的坐标比变化较小的坐标有较小的权系数,这就产生了各种距离。当各个分量为不同性质的量时,“距离”的大小与指标的单位有关。它将样品的不同属性(即各指标或各变量)之间的差别等同看待,这一点有时不能满足实际要求。没有考虑到总体变异对距离远近的影响。

马氏距离(Mahalanobis distance)是由印度统计学家马哈拉诺比斯提出的,表示数据的协方差距离。为两个服从同一分布并且其协方差矩阵为Σ的随机变量与的差异程度:如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也可称为正规化的欧氏距离。它是一种有效的计算两个未知样本集的相似度的方法。对于一个均值为μ,协方差矩阵为Σ的多变量向量,样本与总体的马氏距离为(dm)2=(x-μ)'Σ(-1)(x-μ)。 在绝大多数情况下,马氏距离是可以顺利计算的,但是马氏距离的计算是不稳定的,不稳定的来源是协方差矩阵,这也是马氏距离与欧式距离的最大差异之处。

优点:它不受量纲的影响,两点之间的马氏距离与原始数据的测量单位无关。(它考虑到各种特性之间的联系(例如:一条关于身高的信息会带来一条关于体重的信息,因为两者是有关联的)并且是尺度无关的(scale-invariant),即独立于测量尺度);由标准化数据和中心化数据(即原始数据与均值之差)计算出的二点之间的马氏距离相同。马氏距离还可以排除变量之间的相关性的干扰。

缺点:夸大了变化微小的变量的作用。受协方差矩阵不稳定的影响,马氏距离并不总是能顺利计算出。
————————————————
版权声明:本文为优快云博主「沈波」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/shenbo2030/article/details/44226919

### 欧式距离马氏距离的概念 #### 欧式距离 欧式距离是最常见的两点间直线距离,在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}') ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值