【问题标题】:After fitting a data to Gaussian model, how to check if a new data fall within a variance distance of the model将数据拟合到高斯模型后,如何检查新数据是否在模型的方差距离内
【发布时间】:2013-12-15 00:03:42
【问题描述】:

如果我们有一个已经适合 3D 高斯模型的数据集。我们现在有了均值、协方差矩阵和 pdf。如果我有一个新数据点,我想检查它是否在协方差内(在模型内)。由于某些原因,我需要答案与方差有关。我如何在 matlab 甚至逻辑上做到这一点?

【问题讨论】:

    标签: matlab covariance gaussian


    【解决方案1】:

    Matlab 有一个协方差函数:cov(x) 返回 x 的方差,其中 x 是一个向量。变量 x 也可以是矩阵,因此在这种情况下 cov(x) 返回每列的方差。检查帮助文件,看看这是否是您想要的。

    一般来说,当您谈论将数据点的值与统计模型进行比较时,这通常意味着检查数据值是否小于“标准偏差”的某个倍数。为了讨论的简洁,这用希腊字母 sigma 表示:

    sigma = sqrt(variance);
    

    “异常值”数据点通常定义为 > n*sigma 的数据值,其中 n 是根据应用程序选择的,例如,如果我们说我们想要 2*sigma 分布内的所有数据值,我们会取所有数据值

    在您的情况下,您似乎对 1-sigma 的数据点感兴趣?无论哪种方式,由于您已经有了方差,请使用上述关系计算 sigma,然后根据该值应用检查。

    再次,我不确定这是否是您想要的,但您描述问题的方式让我认为这就是您所追求的。谷歌一下标准差、方差和异常值,看看这个解释是否适合你的应用。

    【讨论】:

      【解决方案2】:

      类似于 roybatty 写的,但更具体一点:如果你想用标准差来检查一个数据点到分布的距离,你会遇到标准差在不同方向上不同的问题。解决这个问题的标准方法是计算分布均值和数据点之间的Mahalanobis distance

      如果你像这样从一组数据点x估计分布参数

      m = mean(x);
      S = cov(x);
      

      那么对于一个新的数据点xn,你会得到这样的马氏距离:

      DM = sqrt((xn - m)' * inv(S) * (xn - m));
      

      DM 是xn 与分布中心m 的距离,以标准差为单位,您可以应用通常的异常值标准,例如DM > 3.

      【讨论】:

      • 这正是我所需要的。谢谢大家的帮助。
      • @user1277543:为什么会改变主意?我以为我给了你你需要的东西?!
      • 是的,你的答案正是我所需要的!抱歉不知道发生了什么!
      猜你喜欢
      • 2012-03-04
      • 2019-09-10
      • 2020-11-04
      • 2018-11-09
      • 2016-07-25
      • 1970-01-01
      • 2013-08-24
      • 2017-02-26
      • 2017-09-09
      相关资源
      最近更新 更多