python - 将混合模型移植到 pymc3

标签 python machine-learning statistics bayesian pymc

我正在尝试移植高斯混合模型,如: 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 - 将混合模型移植到 pymc3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20591211/

相关文章:

python - 如何从Python数据帧中行的前一个密集等级读取值

python - 尝试导入请求或漂亮的汤时出现非常奇怪的错误

python - 在随机森林中使用 "one hot"编码的因变量

machine-learning - 为什么预习完成后,转移学习会导致错误/丢失从随机重新开始?

python - 在 ubuntu 上安装支持 GPU 的 TensorFlow

python - Python 中 OLS 的 Newey-West 标准错误?

sql - 用MySQL计算中位数的简单方法

machine-learning - 如何验证两个文本数据集是否来自不同的分布?

python - Cron 作业错误 : accessing Datastore and emailing

python - 多线程 Numpy 插入