【发布时间】:2013-12-15 00:03:42
【问题描述】:
如果我们有一个已经适合 3D 高斯模型的数据集。我们现在有了均值、协方差矩阵和 pdf。如果我有一个新数据点,我想检查它是否在协方差内(在模型内)。由于某些原因,我需要答案与方差有关。我如何在 matlab 甚至逻辑上做到这一点?
【问题讨论】:
标签: matlab covariance gaussian
如果我们有一个已经适合 3D 高斯模型的数据集。我们现在有了均值、协方差矩阵和 pdf。如果我有一个新数据点,我想检查它是否在协方差内(在模型内)。由于某些原因,我需要答案与方差有关。我如何在 matlab 甚至逻辑上做到这一点?
【问题讨论】:
标签: matlab covariance gaussian
Matlab 有一个协方差函数:cov(x) 返回 x 的方差,其中 x 是一个向量。变量 x 也可以是矩阵,因此在这种情况下 cov(x) 返回每列的方差。检查帮助文件,看看这是否是您想要的。
一般来说,当您谈论将数据点的值与统计模型进行比较时,这通常意味着检查数据值是否小于“标准偏差”的某个倍数。为了讨论的简洁,这用希腊字母 sigma 表示:
sigma = sqrt(variance);
“异常值”数据点通常定义为 > n*sigma 的数据值,其中 n 是根据应用程序选择的,例如,如果我们说我们想要 2*sigma 分布内的所有数据值,我们会取所有数据值
在您的情况下,您似乎对 1-sigma 的数据点感兴趣?无论哪种方式,由于您已经有了方差,请使用上述关系计算 sigma,然后根据该值应用检查。
再次,我不确定这是否是您想要的,但您描述问题的方式让我认为这就是您所追求的。谷歌一下标准差、方差和异常值,看看这个解释是否适合你的应用。
【讨论】:
类似于 roybatty 写的,但更具体一点:如果你想用标准差来检查一个数据点到分布的距离,你会遇到标准差在不同方向上不同的问题。解决这个问题的标准方法是计算分布均值和数据点之间的Mahalanobis distance:
如果你像这样从一组数据点x估计分布参数
m = mean(x);
S = cov(x);
那么对于一个新的数据点xn,你会得到这样的马氏距离:
DM = sqrt((xn - m)' * inv(S) * (xn - m));
DM 是xn 与分布中心m 的距离,以标准差为单位,您可以应用通常的异常值标准,例如DM > 3.
【讨论】: