精华内容
下载资源
问答
  • 马氏距离和欧式距离详解

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

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

    欧氏距离

    最常见的两点之间或多点之间的距离表示法,又称之为欧几里得度量,它定义于欧几里得空间中,如点 x=(x1,,xn)x = (x_1,…,x_n)y=(y1,,yn)y = (y_1,…,y_n) 之间的距离为:
    d(x,y)=(x1y1)2+(x2y2)2+...+(xnyn)2=i=1n(xiyi)2 d(x,y) = \sqrt{(x_1-y_1)^2+(x_2-y_2)^2+...+(x_n-y_n)^2} = \sqrt{\sum_{i=1}^{n}(x_i-y_i)^2}

    1. 二维平面上两点a(x1,y1)与b(x2,y2)间的欧氏距离:
      d12=(x1x2)2+(y1y2)2 d_{12} = \sqrt{(x_1-x_2)^2+(y_1-y_2)^2}

    2. 两个n维向量a(x11,x12,,x1n)a(x_{11},x_{12},…,x_{1n})b(x21,x22,,x2n)b(x_{21},x_{22},…,x_{2n})间的欧氏距离:
      d12=k=1n(x1kx2k)2 d_{12} = \sqrt{\sum_{k=1}^{n}(x_{1k}-x_{2k})^2}

    马氏距离

    在介绍马氏距离之前,我们先来看如下几个概念:

    1. 方差:方差是标准差的平方,而标准差的意义是数据集中各个点到均值点距离的平均值。反应的是数据的离散程度。

    2. 协方差: 标准差与方差是描述一维数据的,当存在多维数据时,我们通常需要知道每个维数的变量中间是否存在关联。协方差就是衡量多维数据集中,变量之间相关性的统计量。比如说,一个人的身高与他的体重的关系,这就需要用协方差来衡量。如果两个变量之间的协方差为正值,则这两个变量之间存在正相关,若为负值,则为负相关。

    3. 协方差矩阵: 当变量多了,超过两个变量了。那么,就用协方差矩阵来衡量这么多变量之间的相关性。假设 XX 是以 nn个随机变数(其中的每个随机变数是也是一个向量,当然是一个行向量)组成的列向量:
      X=[X1X2Xn] X = \begin{bmatrix} X_1 \\ X_2 \\ \vdots \\ X_n \end{bmatrix}
      其中,μiμ_i是第i个元素的期望值,即μi=E(Xi)μ_i=E(X_i)。协方差矩阵的第i,ji,j项(第i,ji,j项是一个协方差)被定义为如下形式:
      ij=cov(Xi,Xj=E[(Xiμi)(Xjμj)]) \sum_{ij} = cov(X_i,X_j = E[(X_i-\mu_i)(X_j-\mu_j)])
      即:
      =[E[(X1μ1)(X1μ1)])E[(X1μ1)(X2μ2)])E[(X1μ1)(Xnμn)])E[(X2μ2)(X1μ1)])E[(X2μ2)(X2μ2)])E[(X2μ2)(Xnμn)])E[(Xnμn)(X1μ1)])E[(Xnμn)(X2μ2)])E[(Xnμn)(Xnμn)])] \sum = \begin{bmatrix} E[(X_1-\mu_1)(X_1-\mu_1)]) & E[(X_1-\mu_1)(X_2-\mu_2)]) & \cdots & E[(X_1-\mu_1)(X_n-\mu_n)]) \\ E[(X_2-\mu_2)(X_1-\mu_1)]) & E[(X_2-\mu_2)(X_2-\mu_2)]) & \cdots & E[(X_2-\mu_2)(X_n-\mu_n)]) \\ \vdots & \vdots & \ddots & \vdots \\ E[(X_n-\mu_n)(X_1-\mu_1)]) & E[(X_n-\mu_n)(X_2-\mu_2)]) & \cdots & E[(X_n-\mu_n)(X_n-\mu_n)]) \end{bmatrix}
      矩阵中的第 (i,j)(i,j) 个元素是 XiX_iXjX_j 的协方差。

    马氏距离的定义:
    马氏距离(Mahalanobis Distance)是由马哈拉诺比斯(P. C. Mahalanobis)提出的,表示数据的协方差距离。它是一种有效的计算两个未知样本集的相似度的方法。与欧氏距离不同的是它考虑到各种特性之间的联系(例如:一条关于身高的信息会带来一条关于体重的信息,因为两者是有关联的)并且是尺度无关的(scale-invariant),即独立于测量尺度。
    对于一个均值为μ=(μ1,μ2,μ3,...,μp)Tμ=(μ_1,μ_2,μ_3,...,μ_p)^T,协方差矩阵为SS的多变量x=(x1,x2,x3,...,xp)Tx=(x_1,x_2,x_3,...,x_p)^T,其马氏距离为:
    DM(x)=(xμ)TS1(xμ) D_M(x) = \sqrt{(x-\mu)^T {S}^{-1}(x-\mu)}
    我们可以发现如果S1S^{-1}是单位阵的时候,马氏距离简化为欧氏距离

    那我们为什么要用马氏距离呢?
    马氏距离有很多优点: 马氏距离不受量纲的影响,两点之间的马氏距离与原始数据的测量单位无关;由标准化数据和中心化数据(即原始数据与均值之差)计算出的二点之间的马氏距离相同。马氏距离还可以排除变量之间的相关性的干扰

    下面我们来看一个例子:
    如果我们以厘米为单位来测量人的身高,以克(g)为单位测量人的体重。每个人被表示为一个两维向量,如一个人身高173cm,体重50000g,表示为(173,50000),根据身高体重的信息来判断体型的相似程度。

    我们已知小明(160,60000);小王(160,59000);小李(170,60000)。根据常识可以知道小明和小王体型相似。但是如果根据欧几里得距离来判断,小明和小王的距离要远远大于小明和小李之间的距离,即小明和小李体型相似。这是因为不同特征的度量标准之间存在差异而导致判断出错

    以克(g)为单位测量人的体重,数据分布比较分散,即方差大,而以厘米为单位来测量人的身高,数据分布就相对集中,方差小。马氏距离的目的就是把方差归一化,使得特征之间的关系更加符合实际情况

    下图(a)展示了三个数据集的初始分布,看起来竖直方向上的那两个集合比较接近。在我们根据数据的协方差归一化空间之后,如图(b),实际上水平方向上的两个集合比较接近。

    在这里插入图片描述

    深入分析:
    当求距离的时候,由于随机向量的每个分量之间量级不一样,比如说x1可能取值范围只有零点几,而x2有可能时而是2000,时而是3000,因此两个变量的离散度具有很大差异
    马氏距离除以了一个方差矩阵,这就把各个分量之间的方差都除掉了,消除了量纲性,更加科学合理。

    在这里插入图片描述
    如上图,看左下方的图,比较中间那个绿色的和另外一个绿色的距离,以及中间绿色到蓝色的距离

    如果不考虑数据的分布,就是直接计算欧式距离,那就是蓝色距离更近

    但实际上需要考虑各分量的分布的,呈椭圆形分布

    蓝色的在椭圆外,绿色的在椭圆内,因此绿色的实际上更近

    马氏距离除以了协方差矩阵,实际上就是把右上角的图变成了右下角

    参考资料:
    马氏距离通俗理解

    展开全文
  • 欧式距离计算公式

    万次阅读 多人点赞 2019-06-26 15:06:02
    欧式距离也称欧几里得距离,是最常见的距离度量,衡量的是多维空间中两个点之间的绝对距离。 也可以理解为:m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏...

    欧式距离也称欧几里得距离,是最常见的距离度量,衡量的是多维空间中两个点之间的绝对距离。

    也可以理解为:m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏距离就是两点之间的实际距离

    下面是具体的计算公式

                                                               

    展开全文
  • 欧式距离

    千次阅读 2019-04-25 20:11:01
    二维空间的欧式距离: 高维空间的欧式距离: 这个符号(两个竖线) 在没有特殊说明的情况下表示欧式距离欧式距离衡量了两个向量在每个维度上的差距。计算的方式为: 将每个维度差的平方求和再相加后开方...

    二维空间的欧式距离:

     

    高维空间的欧式距离:

    这个符号(两个竖线) 在没有特殊说明的情况下表示欧式距离。欧式距离衡量了两个向量在每个维度上的差距。计算的方式为: 将每个维度差的平方求和再相加后开方。

    二维空间的欧式距离:

     

    这个符号(两个竖线) 在没有特殊说明的情况下表示欧式距离。欧式距离衡量了两个向量在每个维度上的差距。计算的方式为: 将每个维度差的平方求和再相加后开方。

    展开全文
  • 这是一个计算欧式距离的matlab程序,本人使用过,很好用。 这是一个计算欧式距离的matlab程序,本人使用过,很好用。
  • 两者作差的绝对值,我们称为欧式距离。 经过标准化的作差绝对值,我们称为统计距离,或者标准化过后的距离。其中,代表样本的标准差。 在多元的情形中,假设我们有两个维向量 如上面的定义,相当于维空间中的...

    在一元的情形中,定义两个点y_{1}y_{2}之间的距离:

    • 两者作差的绝对值\left | y_{1}-y_{2} \right |,我们称为欧式距离
    • 经过标准化的作差绝对值\left | y_{1}-y_{2} \right |/s_{y},我们称为统计距离,或者标准化过后的距离。其中,s_{y}代表样本的标准差。

    在多元的情形中,假设我们有两个p维向量y_1={(y_{11},...,y_{1p})}y_{2}={(y_{21},...,y_{2p})}

    如上面的定义,y_1={(y_{11},...,y_{1p})}y_{2}={(y_{21},...,y_{2p})}相当于p维空间中的两个点。我们也有两种方法定义两个点之间的距离。

    一、欧式距离(Euclidean distance)/L_{2}范数

    欧式距离的计算公式如下:

    d=\left \| y_{1}-y_{2} \right \|=\sqrt{{(y_{1}-y_{2})}'(y_{1}-y_{2})}=\sqrt{\sum ^{p}_{j=1}(y_{1j}-y_{2j})^{2}}

    直观的理解即为:每个分量之间的差异的平方和,再开根号。

    缺陷:

    1、没有考虑到不同变量(维度)变化的尺度不同。

    例如,y_{1},y_{2}代表的是长度,用“厘米”作为度量单位和用“米”作为度量单位,算出来的两者的差别非常大。他们其实是一样的数值,只是因为单位的不同,造成欧式距离计算的结果产生极大的变化。

    2、没有考虑变量之间的相关性。

    如果两个变量(维度)之间的相关性非常强,欧式距离无法体现相关性。

    二、马氏距离/统计距离(Statistical/Mahalanobis distance)

    类似于一元情形\left | y_{1}-y_{2} \right |/s_{y},我们定义y_1={(y_{11},...,y_{1p})}y_{2}={(y_{21},...,y_{2p})}之间的马氏距离/统计距离为:

    d=\sqrt{{(y_{1}-y_{2})}'S^{-1}(y_{1}-y_{2})}

    借助于一元情形的标准化思想,我们求解距离的时候增加了一个y_{1}y_{2}他们的协方差矩阵的逆,使得方差更大的变量(维度)对应了更小的权重,而且两个高度相关的变量(维度)对统计距离的贡献小于两个相关性相对较低的变量的贡献。

    三、马氏距离和欧式距离的关系

    统计距离实际上是两个经过“变换”的向量S^{-1/2}y_{1}S^{-1/2}y_{2}之间的欧式距离。 

    cov(S^{-1/2}y_{1})=(S^{-1/2}y_{1})'(S^{-1/2}y_{1})=y_{1}'(S^{-1/2})'S^{-1/2}y_{1}=y_{1}'S^{-1}y_{1},其中Sy_{1}的协方差矩阵,即S=y_{1}'y_{1}

    S=y_{1}'y_{1}代入上式,可得cov(S^{-1/2}y_{1})=E_{p}E_{p}代表一个p维的单位阵。

    也就是说,随机向量y_{1}通过乘上矩阵S^{-1/2},得到一个新的随机向量,它的方差,每个维度的方差都是1,是标准化的。它的每两个变量之间的协方差为0。从几何的意义上来讲,相当于对向量做了一个“旋转”和“伸缩变换”,通过变换之后的向量,每个分量之间的协方差为0,每个分量自身的方差标准化为1。

    我们来计算标准化之后的向量之间的欧式距离。

    \begin{align} \left \| S^{-1/2}y_{1}-S^{-1/2}y_{2} \right \| &=\left \| S^{-1/2}(y_{1}-y_{2}) \right \| \\ &=\sqrt{{(S^{-1/2}(y_{1}-y_{2})})'(S^{-1/2}(y_{1}-y_{2}))} \\ &=\sqrt{(y_{1}-y_{2})'{(S^{-1/2}})'S^{-1/2}(y_{1}-y_{2})} \\ &=\sqrt{(y_{1}-y_{2})'S^{-1}(y_{1}-y_{2})} \end{align}

    结论:马氏距离即是我们将向量“标准化”过后的欧式距离,如何标准化,即乘上向量其自身的协防差矩阵的逆的矩阵根。

    四、几何理解

    左下方的图,比较中间那个绿色的和另外一个绿色的距离,以及中间绿色到蓝色的距离。如果不考虑数据的分布,就是直接计算欧式距离,那就是蓝色距离更近(左上图)。但实际上需要考虑各分量的分布的,直观上我们能看出,数据是呈椭圆形分布。蓝色的在椭圆外,绿色的在椭圆内,因此绿色的实际上更近(右上图)。求马氏距离的过程,实际上就是把左下角的图变成了右下角。

     

     

     

     

     

    展开全文
  • 马氏距离与欧式距离

    千次阅读 2014-10-09 21:32:22
    一、欧式距离
  • 欧氏距离和马氏距离以及马氏距离的实现
  • 欧式距离与马氏距离

    2017-01-05 09:21:49
    在二维和三维空间中的欧式距离的就是两点之间的距离,二维的公式是 d = sqrt((x1-x2)^+(y1-y2)^) 三维的公式是 d=sqrt(x1-x2)^+(y1-y2)^+(z1-z2)^) 推广到n维空间,欧式距离的公式是 d=sqr
  • 两个点集points1,points2,用dist来存储距离 points1=np.array([[1,2],[3,4]]) points2 = np.array([[5, 6],[7,8]]) dist = np.zeros(shape=[points1.shape[0],points2.shape[0]]) for i in range(points1.shape...
  • 我还发现,在Deep Learning里,因为操作的对象是高维向量,所以很多paper里的公式都喜欢用矩阵乘来表达公式,这样的优点是公式表达更简洁(一个矩阵乘同时包含了乘法加法),缺点就是菜的人可能一时半会反应不过来...
  • 文章目录一、欧氏距离二、弗罗贝尼乌斯范数 一、欧氏距离 具体定义参考 欧几里得度量(euclidean metric)(也称欧氏距离)是一个通常采用的距离定义,指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该...
  • 计算公式 二维空间的公式 其中,为点与点之间的欧氏距离;为点到原点的欧氏距离。 三维空间的公式 n维空间的公式
  • 计算矩阵的欧式距离

    万次阅读 热门讨论 2018-11-01 08:18:13
    对于kNN算法,难点在于计算测试集中...分别对训练集测试集中的数据进行循环遍历,计算每两个样本之间的欧式距离。此算法没有经过任何优化。 import numpy as np matrix_1 = np.array([[1, 2, 3], [4, 5, 6], ...
  • 前言 最近需要写关于kmeans的一些小程序,需要计算距离,直接写for循环又特别慢,再要是样本多一点,那简直了。细细一想,需要计算距离的地方还真不少,kmeans、...然后分别对AB中的每个样本求其向量的模平方,也就
  • MATLAB求欧式距离

    万次阅读 2013-12-23 09:03:42
    MATLAB求欧式距离 Last Edit 2013/12/23 欧式距离公式有如下几种表示方法: 举例说明: a=[0 0;1 0;0 2]; pdist(a,'euclidean') ans =  1.0000 2.0000 2.2361 结果是按照(1,2),(1,...
  • 本文转载了一篇关于标准的基于欧式距离的模板匹配算法的文章,作者写的很不错,跟大家分享一下!
  • 欧几里得距离(欧式距离

    千次阅读 2020-02-10 10:58:06
    指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。 比如:在二维和三维空间中的欧氏距离就是两点之间的实际距离。 二、公式 二维: ρ=(x2−x1)2+(y2−y1)2\rho=\sqrt{(x_2-x_1)^2+(y...
  • 1、欧氏距离Euclidean Distance: 2、曼哈顿距离Manhattan: 3、Mahalanobis马氏距离 马氏距离的浅显解释,见我的博文:...马氏距离和欧式距离的对比,见我的博文:https://blog.csdn.net/we...
  • 以二维空间为例,两点(x1,y1),(x2,y2)之间的欧式距离为: 曼哈顿距离则表示两个点在标准坐标系上的绝对轴距之。 还是以二维空间为例,两点(x1,y1),(x2,y2)之间的曼哈顿距离为: 用一张图来区分一下两者 图中...
  • matlab中欧式距离的计算函数。不同于传统2维图像中两点之间距离公式。可以在n维数据中进行计算。
  • pytorch cuda 欧式距离 矩阵运算

    千次阅读 2020-09-19 18:17:56
    欧式距离 def get_elu_dis(data): return torch.sqrt((-2*data.mm(data.t()))+torch.sum(torch.square(data),axis=1,keepdim=True)+torch.sum(torch.square(data.t()),axis=0,keepdim=True)) 余玄距离 def get_cos...
  • 欧式距离 caffe tensorflow

    千次阅读 2017-07-17 15:40:20
    关于每个样本对(向量)求L2-loss(相减 平方 求和 除以2)   对mini-batch内的所有损失取平均:  (m对应官方文档中的N) 实现代码:...
  • 两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差标准差的商: 上式定义了总体相关系数,常用希腊小写字母p 作为代表符号。估算样本的协方差标准差,可得到皮尔逊相关系数,常用英文小写字母 r 代表...
  • pytorch 快速计算两个tensor的欧式距离

    千次阅读 2021-03-19 14:38:46
    解:将欧式距离的公式展开,根号下面是。a是tensor A中某一行的平方和,b是tensor B中某一行的平方和,ab是两个向量的内积。 所以代码为: def EuclideanDistances(a,b): sq_a = a**2 sum_sq_a = torch.sum.
  • 推荐系统(1)-计算欧式距离分数

    千次阅读 2018-03-01 20:12:15
    计算欧式距离分数 欧式距离分数:代表一种相似度指标,可以计算两个数据点之间的欧几里得距离 以电影推荐系统为例 代码如下: # -*- coding:utf-8 -*- ''' 计算欧式距离分数 ''' import json import numpy ...
  • python计算矩阵间的欧式距离

    千次阅读 2018-09-07 17:29:46
    背景:计算一个M*D的二维矩阵与一个N*D的二维矩阵各个行向量...再继续推广到一个二维矩阵M个行向量与另一个矩阵N个行向量的欧式距离形成的一个二维矩阵矩阵为M*N: 最终结果为三个M*N的二维矩阵求和: 1. 第...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,256
精华内容 2,902
关键字:

平方欧式距离和欧式距离