2

動作しない小さなpymc3コードをいくつか書きます。

import pymc3

def create_model_pymc(data):
    with pymc3.Model() as model:
        k = 3
        #discussion about conjugate prior of a dirichlet are not so common see http://andrewgelman.com/2009/04/29/conjugate_prior/
        #u = pymc3.Uniform("u", lower=.1, upper=data.max()+1., observed=data, shape=k)
        u = pymc3.Exponential('u', 1./10, observed=data, shape=k)
        p = pymc3.Dirichlet('p', a=u, shape=k)
        c = pymc3.Categorical('c', p=p)
    return model

alpha_posterior = np.array([10., 3., 4.])
model = create_model_pymc(alpha_posterior)

with model:
    step = pymc3.Metropolis(model.vars)
    trace = pymc3.sample(20000, step)
    #trace = pymc3.sample(20000)

Theano エラー "IndexError: index out of bounds" というエラー メッセージが表示されましたが、その理由がわかりません。上記のコードのさまざまなバリエーションを試しましたが、すべてうまくいきません。

コードの意味に興味がある場合は、多項式カウントを観察した後にディリクレ パラメーターの事後が (10, 3, 4) であることを確認するためのものです。 .,1.,1.]) の結果は (10.,3.,4.)

シンプルな直接サンプリング:

a=alpha_posterior
print a
nb_samples = 200000
c_ = np.ndarray(nb_samples)
for i in range(nb_samples):
    d = scipy.stats.dirichlet.rvs(a,1)[0]
    c_[i] = np.random.choice(3, 1, p=d)
ns = float(nb_samples)

print (c_==0).sum()/ns
print (c_==1).sum()/ns
print (c_==2).sum()/ns
print x
print x/float(x.sum())
4

1 に答える 1