【问题标题】:Porting Mixture Models to pymc3将混合模型移植到 pymc3
【发布时间】:2014-01-02 16:19:44
【问题描述】:

我正在尝试将How to model a mixture of 3 Normals in PyMC? 中定义的高斯混合模型移植到 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.

我做错了什么?

【问题讨论】:

    标签: python machine-learning statistics bayesian pymc


    【解决方案1】:

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

    短期解决方案是至少为多项式提供初始值。我将在错误跟踪器上提交一个问题,以找出长期要做的事情。

    【讨论】:

    • 当我将 testval=1 添加到多项式时,我得到: ValueError: ('Input dimension mis-match. (input[0].shape[0] = 500, input[1].shape[ 0] = 3)', Elemwise{mul,no_inplace}(category, ), [Elemwise{mul,no_inplace}.0])
    • 我不认为整数是多项式的适当测试值(应该是大小为 k 的向量)。无论如何,这是我们需要解决的问题。
    猜你喜欢
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 2016-05-28
    • 2019-03-03
    • 2014-10-28
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多