繁体   English   中英

将混合模型移植到pymc3

[英]Porting Mixture Models to pymc3

我试图移植如下定义的高斯混合模型: 如何在PyMC中模拟3个法线的混合? pymc3

import numpy as np
from pymc import Model, Gamma, Normal, Dirichlet
from pymc import Multinomial
from pymc import sample, Metropolis

k = 3
ndata = 500

v = np.random.randint(0, k, ndata)
data = ((v == 0)*(50 + np.random.randn(ndata))
        + (v == 1)*(-50 + np.random.randn(ndata))
        + (v == 2)*np.random.randn(ndata))

model = Model()

with model:
    dd = Dirichlet('dd', k=k, a=1, shape=k)
    precs = Gamma('precs', alpha=0.1, beta=0.1, shape=k)
    means = Normal('means', 0, 0.001, shape=k)
    category = Multinomial('category',
                           n=1,
                           p=dd,
                           shape=ndata)

    points = Normal('obs',
                    means[category],
                    precs[category],
                    observed=data)
    tr = sample(3000, step=Metropolis())

我收到以下代码错误:

AttributeError: <pymc.quickclass.Multinomial object at 0x4804210> has no default value to use, checked for: ['mode'] pass testval argument or provide one of these.

我究竟做错了什么?

这是因为没有为模型中的变量传递初始值。 通常这没有问题,因为模型只取每个分布的均值/中值/模式并使用它们。 多项式很难,因为平均值通常给出支持之外的值(即非整数值),并且模式很难计算。

短期解决方案是至少为多项式提供初始值。 我将在bug跟踪器上提交一个问题,以便找出长期做什么。

暂无
暂无

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

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