【问题标题】:Using matlab function "pdf"使用matlab函数“pdf”
【发布时间】:2013-03-10 14:40:40
【问题描述】:

我有一个64维的高斯混合分布对象obj,想把它放在pdf函数中找出某个点的概率。

然而,当我输入 pdf(obj,obj.mu(1,:)) 来测试对象时,它会产生非常高的概率(如 2.4845e+069)

而且它没有意义,因为概率应该介于零和一之间。

我的matlab有什么问题吗?

附言 即使pdf(obj,obj.mu(1,:)+obj.Sigma(1,1)*rand()) 产生高概率(2.1682e+069)

【问题讨论】:

  • 概率密度函数不提供某个值的概率。为了回答您的问题,如果您发布了 obj 的创建,将会很有帮助。
  • @Deve obj 是通过标准 gmdistribution 函数生成的。
  • 我预料到了这一点。你给那个函数传递了什么参数?
  • @Deve 使用EM算法估计参数。我用的代码是莫晨写的代码,这个是link
  • @Deve 我也尝试过标准的gmdistribution.fit 函数。它产生相同的结果。以下是代码:obj = gmdistribution.fit(features',3)pdf(obj, features(:,1)') 结果还是很高ans = 1.1505e+051

标签: matlab probability gaussian


【解决方案1】:

首先要做的事:概率密度函数并不总是计算为 1,它只是在其域内积分为 1。

此外,您在拟合高斯混合模型时看到的是problem of singularities(参见第 434 页,图 9.7)。某些组件崩溃到单个数据点不可避免地会导致方差变为 0 并且 PDF 爆炸。这在高斯混合模型中经常遇到,因为它不是对数凸的,并且似然函数中有很多局部最大值。我们试图找到一个表现良好且表现良好的局部最大值,而奇点是特别糟糕的情况。

当您看到这一点时,您将希望以不同的起点重新运行算法或减少您正在使用的组件数量。上面的书还建议将特定组件重置为不同的值。

另一种方法是使用贝叶斯方法,对参数采用先验或正则化项,这将惩罚 0 sigma 参数等古怪值。

您可以使用gmdistribution.fit 中的不同起始值间接控制第一部分。对于第二部分,您可以使用Regularize 参数:http://www.mathworks.com/help/stats/gmdistribution.fit.html

【讨论】:

  • 非常感谢!很详细的解释!我检查了协方差矩阵,发现有很多零条目。在应用正则化项之后,概率现在变得有意义了。然而值变得非常低:pdf(obj, obj.mu(1,:)) = 1.4080e-052 正常吗?
  • 是的,当您有很多维度时,PDF 会非常小。您可能希望使用 log prob 以避免下溢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-29
  • 2011-12-02
  • 2021-01-13
相关资源
最近更新 更多