5

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

换句话说,我从 M 中取一个 sigma 的椭圆,并想检查 p 是否在该椭圆内。

4

3 回答 3

4

如果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它对应于经典的欧几里得距离。要找到您是否必须使用d1或留作d2练习(对不起,我的部分工作是教学)。写出多维高斯公式并将其与一维情况进行比较,因为多维情况只是一维的特例(或进行一些数值实验)。

注意:在非常高维空间或要测试的很多点中,您可能会从 V 的特征向量和特征值(即椭圆体的主轴及其相应的方差)中找到一种聪明/更快的方法。

希望这可以帮助。

一个。

于 2010-12-15T22:13:27.163 回答
3

考虑在给定正态分布的情况下计算该点的概率:

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由 Statistics Toolbox 提供

于 2010-12-15T22:10:58.253 回答
0

也许我完全不在了,但这与只询问每个维度不一样:我在 sigma 中吗?

伪代码:

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

因为您想知道 p 是否在高斯的每个维度内。所以实际上,这只是一个空间问题,你的高斯不必对它做任何事情(除了 M 和 sigma ,它们只是距离)。

在 MATLAB 中,您可以尝试以下操作:

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

到那个地方的距离可能是,我不知道欧几里得距离的函数。也许 dist 有效:

dist(M, p)

因为 M 只是空间中的一个点,p 也是如此。只有 2 个向量。现在是最后一个。您想以 sigma 的形式了解距离:

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

我认为这会奏效。

于 2010-12-15T21:44:05.927 回答