2010-12-15 78 views
3

我有一个高维高斯的平均M和协方差矩阵V.我想计算从点p到M的距离,考虑到V(I猜测它是P与M的标准偏差的距离?)。计算从点p到高维的距离高斯(M,V)

差异地说,我从M处取一个椭圆一西格玛,并想检查p是否在该椭圆内。

+0

尝试http://math.stackexchange.com/ – Jacob 2010-12-15 21:31:49

回答

2

如果V是高斯的有效协方差矩阵提供,则它是对称正定,因此定义了一个有效的标量乘积。顺便说一句inv(V)也是。

因此,假定m和p列向量,可以定义距离为:

d1 = sqrt((M-p)'*V*(M-p)); 
d2 = sqrt((M-p)'*inv(V)*(M-p)); 

Matlab的方法之一将重写d2为(可能一些不必要的括号内):

d2 = sqrt((M-p)'*(V\(M-p))); 

好的是,当V是单位矩阵时,d1==d2它对应于经典的欧几里德距离。要找到它,你必须使用d1d2作为练习(对不起,我的工作的一部分是教学)。写出多维高斯公式,并将其与1D情况进行比较,因为多维情况只是1D的特定情况(或执行一些数值实验)。注意:在非常高维空间或许多要测试的点上,可以从V的特征向量和特征值(即椭圆体的主轴及其相应的方差)中找到更聪明/更快的方式。

希望这会有所帮助。

A.

+0

这似乎是它。谢谢! – 2010-12-15 22:45:02

+0

这个东西有一个名字:[Mahalanobis distance](https://en.wikipedia.org/wiki/Mahalanobis_distance)。 :-) – 2013-11-29 18:29:21

0

也许我完全没有了,但是这不是一样的只是要求每个维度:我在西格玛?

伪代码:

foreach(dimension d) 
    (M(d) - sigma(d) < p(d) < M(d) + sigma(d)) ? 

因为你想知道如果p是您高斯的每一个层面里面。所以实际上,这只是一个空间问题,你的高斯不必对它做任何事情(除了M和西格马这些只是距离)。

在MATLAB中,你可以尝试像:

all(M - sigma < p < M + sigma) 

到那个地方的距离可能是,在这里我不知道欧氏距离的函数。也许dist的作品:

dist(M, p) 

因为M只是一个点,在空间和P以及。只有2个向量。 现在是最后一个。你想知道的西格马的形式的距离:

% create a distance vector and divide it by sigma 
M - p ./ sigma 

我认为这将做伎俩。

+0

这个解决方案是行不通的,因为它没有考虑到协方差(椭圆是“倾斜”,在某种程度上)。虽然谢谢! – 2010-12-15 21:51:33

2

考虑计算的点的概率给出的正态分布:

M = [1 -1];    %# mean vector 
V = [.9 .4; .4 .3];  %# covariance matrix 
p = [0.5 -1.5];   %# 2d-point 
prob = mvnpdf(p,M,V); %# probability P(p|mu,cov) 

功能MVNPDF由统计工具箱