我有一个具有平均 M 和协方差矩阵 V 的高维高斯。我想计算从点 p 到 M 的距离,考虑到 V(我猜它是 p 与 M 的标准差的距离?)。
换句话说,我从 M 中取一个 sigma 的椭圆,并想检查 p 是否在该椭圆内。
如果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 的特征向量和特征值(即椭圆体的主轴及其相应的方差)中找到一种聪明/更快的方法。
希望这可以帮助。
一个。
考虑在给定正态分布的情况下计算该点的概率:
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 提供
也许我完全不在了,但这与只询问每个维度不一样:我在 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
我认为这会奏效。