【发布时间】: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.5 和 2.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