【问题标题】:Compute probability over a multivariate normal计算多元正态的概率
【发布时间】:2013-02-27 19:28:18
【问题描述】:

我的问题涉及数学和 CS 问题,但由于我需要一个高性能的实现,所以我将其发布在这里。

问题:

我有一个估计的正态双变量分布,定义为一个 python 矩阵,但是我需要在 Java 中转置相同的计算。 (此处为虚拟值)

mean = numpy.matrix([[0],[0]])
cov = numpy.matrix([[1,0],[0,1]])

当我收到一个 整数 值 (x,y) 的列向量时,我想计算给定元组的概率。

value = numpy.matrix([[4],[3]])
probability_of_value_given_the_distribution = ???

现在,从数学的角度来看,这将是 3.5 < x < 4.52.5 < y < 3.5 在我的法线概率密度函数上的积分。

我想知道的:

有没有办法避免这种有效实现,这意味着处理定义在矩阵和双积分上的表达式?除此之外,如果我必须自己实现它会花费我一段时间,这在计算上会很昂贵。一个近似的解决方案对我来说非常好。

我的理由:

在单变量正态中,可以简单地使用累积分布函数(或者甚至将其值存储为标准函数,然后进行归一化),但不幸的是,出现了not to be 多变量的封闭 cdf 形式。

单变量的另一种方法是使用 bivariate approximation 的倒数(因此,将正态近似为二项式),但将其扩展到多变量我不知道如何计算协方差。

我真的希望有人已经实现了这个,我很快就需要它(完成我的论文),但我找不到任何东西。

【问题讨论】:

  • 你检查过Compute the multivariate normal CDF in Java,这似乎正是你想要做的
  • cdf 正是我所需要的。很抱歉没有明确指定它。显然不是那么微不足道,我要么做一些近似,要么使用 matlab 来计算我的程序中感兴趣的值并将它们存储在一个表中(程序在 android 上运行,所以无法在那里执行 fortran 代码)

标签: java python numpy probability normal-distribution


【解决方案1】:

OpenTURNS 提供了多正态分布 CDF 的有效实现(请参阅code)。

import numpy as np

mean = np.array([0.0, 0.0])
cov = np.array([[1.0, 0.0],[0.0, 1.0]])

让我们用这些参数创建多元正态分布。

import openturns as ot
multinormal = ot.Normal(mean, ot.CovarianceMatrix(cov))

现在让我们计算平方 [3.5, 4.5] x |2.5, 3.5] 的概率:

prob = multinormal.computeProbability(ot.Interval([3.5,2.5], [4.5,3.5])) 
print(prob)

计算出来的概率是

1.3701244220201715e-06

【讨论】:

    【解决方案2】:

    如果您正在寻找probabiliy density function of a bivariate normal distribution,以下是可以完成这项工作的几行代码:

    import numpy as np
    
    def multivariate_pdf(vector, mean, cov):
        quadratic_form = np.dot(np.dot(vector-mean,np.linalg.inv(cov)),np.transpose(vector-mean))
        return np.exp(-.5 * quadratic_form)/ (2*np.pi * np.linalg.det(cov))
    
    mean = np.array([0,0])
    cov = np.array([[1,0],[0,1]])
    vector = np.array([4,3])
    
    pdf = multivariate_pdf(vector, mean, cov)
    

    【讨论】:

    • 抱歉,我需要累积密度函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 2013-03-21
    • 2017-06-05
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多