2

私の質問は数学とCSの両方の問題に対応していますが、パフォーマンスの高い実装が必要なので、ここに投稿します。

問題:

Python行列として定義された推定正規二変量分布がありますが、Javaで同じ計算を転置する必要があります。(ここにダミーの値)

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

inuptで整数値(x、y)の列ベクトルを受け取ったとき、その指定されたタプルの確率を計算したいと思います。

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

さて、材料の観点から、これは私の法線の確率密度関数の積分に3.5 < x < 4.5なります。2.5 < y < 3.5

私が知りたいこと:

これの効果的な実装を回避する方法はありますか?それは、行列上で定義された式と二重積分を処理することを意味しますか?それに加えて、自分で実装しなければならない場合は時間がかかりますが、これは計算コストが高くなります。おおよその解決策は私にとっては完全にうまくいくでしょう。

私の推論:

単変量正規分布では、累積分布関数を使用するだけで済みます(または、標準分布関数の値を保存してから正規化することもできます)が、残念ながら、多変量の閉じた累積分布関数形式はないようです。

単変量の別のアプローチは、二変量近似の逆関数を使用することです(つまり、正規分布を二項式として近似します)が、これを多変量に拡張すると、共分散をカウントし続ける方法がわかりません。

誰かがすでにこれを実装していることを本当に望んでいます。すぐに必要になり(私の論文を完成させます)、何も見つかりませんでした。

4

2 に答える 2

2

OpenTURNSは、多変量正規分布のCDFの効率的な実装を提供します(コードを参照)。

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
于 2020-10-09T23:31:56.653 に答える
1

二変量正規分布の確率密度関数を探している場合、以下はその仕事をすることができるいくつかの行です:

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)
于 2013-02-27T20:45:00.990 に答える