我有一个具有平均M和协方差矩阵V的高维高斯。我想计算从点p到M的距离,考虑到V(我猜它是从M的标准偏差中得到的距离?)。
差别地说,我从M取一个椭圆一个sigma,并想检查p是否在椭圆内。
答案 0 :(得分: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答案 1 :(得分: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
并且它对应于经典的欧几里德距离。要找到你必须使用d1
或d2
作为练习(抱歉,我的工作的一部分是教学)。写出多维高斯公式并将其与1D情况进行比较,因为多维情况只是1D的特定情况(或执行一些数值实验)。
注意:在非常高维度的空间或很多要测试的点上,你可能会发现一个聪明/快速的方法来表示V的特征向量和特征值(即椭球的主轴及其相应的方差)。
希望这有帮助。
一个。
答案 2 :(得分: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个向量。 现在是最后一个。你想以西格玛的形式知道距离:
% create a distance vector and divide it by sigma
M - p ./ sigma
我认为这样做会有所帮助。