繁体   English   中英

Pymc3中的分类混合模型

[英]Categorical Mixture Model in Pymc3

我是Pymc3的新手,正在尝试创建https://en.wikipedia.org/wiki/Mixture_model#Categorical_mixture_model中显示的分类混合物模型。 我在连接'x'变量时遇到困难。 我认为这是因为我必须使z变量具有确定性,但是在分配'x'的那一行我收到一条错误消息:“ ValueError:我们期望3个输入但得到2个。” 看来p函数仅接受2个输入,所以我被卡住了。 我已经尝试了很多不同的方法,但是还没有使它起作用。

import numpy as np
from pymc3 import *
import theano.tensor as t

K = 3 #NUMBER OF TOPICS
V = 20 #NUMBER OF WORDS
N = 15 #NUMBER OF DOCUMENTS

#GENERAETE RANDOM CATEGORICAL MIXTURES
data = np.ones([N,V])

@theano.compile.ops.as_op(itypes=[t.lscalar, t.dscalar, t.dscalar],otypes=[t.dvector])
def p(z=z, phi=phi):
    return [phi[z[i,j]] for i in range(D) for j in range(W)]

model = Model()
with model:

    alpha = np.ones(V)
    beta = np.ones(K)

    theta = [Dirichlet('theta_%i' % i, alpha, shape=V) for i in range(K)]
    phi = Dirichlet('phi', beta, shape=K)

    z = [Categorical('z_%i' % i, p = phi, shape=V) for i in range(N)]
    x = [Categorical('x_%i_%i' % (i,j), p=p(z[i][j],phi), observed=data[i,j]) for i in range(N) for j in range(V)]
    #x = [Categorical('x_%i_%i' % (i,j), p=theta[z[i][j]], observed=data[i,j]) for i in range(N) for j in range(V)]

    print "Created model.  Now begin sampling"
    step = Slice()
    trace = sample(n, step)

    trace.get_values('phi')

对于初学者,在上面的示例中,z和phi没有值,因此无法将它们用作默认值。 我们也没有D和W的值。

至于参数的数量,您定义的函数有2个,但上面的theano装饰器有3个。我建议

@theano.compile.ops.as_op(itypes=[t.lscalar, t.dvector],otypes=[t.dvector])
def p(z, phi):
    return [phi[z[i,j]] for i,j in zip(range(D),range(W))]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM