贝叶斯统计模型的PyMC到PyMC3

时间:2019-11-29 14:25:46

标签: python pymc3 pymc

我从《概率编程和黑客贝叶斯方法》一书着手进行贝叶斯统计。我意识到那里的代码示例基于pymc,而已不推荐使用pymc3。我试图弄清楚如何将代码移植到pymc3代码中,但是在那里遇到了问题。 我想知道是否有人可以帮助将以下代码片段移植到pymc3:

import numpy as np
import pymc as pm

count_data = np.loadtxt("txtdata.csv")
n_count_data = len(count_data)

alpha = 1.0 / count_data.mean()

lambda_1 = pm.Exponential("lambda_1", alpha)
lambda_2 = pm.Exponential("lambda_2", alpha)

tau = pm.DiscreteUniform("tau", lower=0, upper=n_count_data)

@pm.deterministic
def lambda_(tau=tau, lambda_1=lambda_1, lambda_2=lambda_2):
    out = np.zeros(n_count_data)
    out[:tau] = lambda_1  # lambda before tau is lambda1
    out[tau:] = lambda_2  # lambda after (and including) tau is lambda2
    return out

observation = pm.Poisson("obs", lambda_, value=count_data, observed=True)

model = pm.Model([observation, lambda_1, lambda_2, tau])
mcmc = pm.MCMC(model)
mcmc.sample(40000, 10000, 1)
lambda_1_samples = mcmc.trace('lambda_1')[:]
lambda_2_samples = mcmc.trace('lambda_2')[:]
tau_samples = mcmc.trace('tau')[:]

我本可以做到这一点,但后来在生产线上遇到了麻烦

@pm.deterministic

我的部分代码(物有所值):

import numpy as np
import pymc3 as pm
from matplotlib import pyplot as plt

count_data = np.loadtxt("txtdata.csv")
n_count_data = len(count_data)

alpha = 1.0 / count_data.mean()

basic_model = pm.Model()

with basic_model:
    lambda_1 = pm.Exponential("lambda_1", alpha)
    lambda_2 = pm.Exponential("lambda_2", alpha)
    tau = pm.DiscreteUniform("tau", lower=0, upper=n_count_data)

    @pm.deterministics
    def lambda_(tau=tau, lambda_1=lambda_1, lambda_2=lambda_2):
        out = np.zeros(n_count_data)
        out[:tau] = lambda_1  # lambda before tau is lambda1
        out[tau:] = lambda_2  # lambda after (and including) tau is lambda2
        return out

    observation = pm.Poisson("obs", lambda_, value=count_data, observed=True)

如何在pymc3中使用它?

0 个答案:

没有答案