我有一个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)
最佳答案
首先要做的事情是:概率密度函数的计算结果并不总是为 1,它只是在其域上积分为 1。
此外,您看到的是 problem of singularities (参见第 434 页,图 9.7)拟合高斯混合模型时。某些组件折叠到单个数据点上不可避免地会导致方差变为 0 并且 PDF 爆炸。这在高斯混合模型中经常遇到,因为它不是对数凸的,并且似然函数中有很多局部最大值。我们试图找到一个表现良好的局部最大值,而奇点是特别糟糕的情况。
当您看到此情况时,您将希望以不同的起点重新运行算法或减少正在使用的组件数量。上面的书还建议将特定组件重置为不同的值。
另一种方法是使用贝叶斯方法,对参数采用先验项或正则化项,这将惩罚奇怪的值,例如 0 sigma 参数。
您可以在gmdistribution.fit
中使用不同的起始值间接控制第一部分。对于第二部分,您可以使用 Regularize
参数:http://www.mathworks.com/help/stats/gmdistribution.fit.html
关于matlab - 使用matlab函数 "pdf",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15541575/