1

pymc 3 を使用する場合、一変量確率変数を行列に組み立てて、多変量分布の事前分布として使用することは可能ですか? もしそうなら、どうすればこれについて最善を尽くすことができますか?

これが具体的な例です。3 つの RV を使用して、三角形行列 A を作成します。

a11_squared=Gamma(alpha=1, beta=2)
a22_squared=Gamma(alpha=1, beta=2)
a12=Normal(mu=0, tau=1)
a21=0

いくつかの操作の後、この行列を多変量正規分布の精度パラメーターの事前分布として使用します。

これはおそらく theano の tensor 変数を使用した操作に関連していると思われるため、theano タグも追加します。

お時間をいただきありがとうございます!

編集1:これは私がやろうとしていることの最小限の例です:

from matplotlib.pylab import *
from pymc import *

cov=np.array([[2,1],[1,3]])
mean=([2,7])
tau=np.linalg.inv(cov)
N=1
z_data=np.ndarray.flatten(np.random.multivariate_normal(mean, cov, N))

def ex_tau(a11_squared, a22_squared, a12):
    ex_A=theano.tensor.stacklists([[theano.tensor.sqrt(a11_squared), a12], [theano.tensor.constant(0, dtype='float64'), theano.tensor.sqrt(a22_squared)]])
    ex_cov=ex_A.T.dot(ex_A)
    return theano.sandbox.linalg.ops.matrix_inverse(ex_cov)     

with Model() as model:    
    a11_squared=Gamma('a11_squared', alpha=1, beta=2)
    a22_squared=Gamma('a22_squared', alpha=1, beta=2)
    a12=Normal('a12', mu=0, tau=1)
    z=MvNormal('z', mu=mean, Tau=ex_tau(a11_squared, a22_squared, a12), shape=2, observed=z_data)

編集2:これはex_tau、pymcの外で仕事をしているように見えるテストです

from theano.tensor import stacklists, scalars, matrices, sqrt, constant, dot
from theano import function, printing
from theano.sandbox.linalg.ops import matrix_inverse

def ex_tau(a11_squared, a22_squared, a12):
    ex_A=stacklists([[sqrt(a11_squared), a12], [constant(0, dtype='float64'), sqrt(a22_squared)]])
    ex_cov=ex_A.T.dot(ex_A)
    return matrix_inverse(ex_cov)

printing.debugprint(ex_tau(2, 4, -3))
4

1 に答える 1

0

あなたが望むことをするかもしれないように見えstacklistます。

于 2013-10-28T20:43:04.490 に答える