Work with the actual hypotheses in pymc3 - 将示例从 ThinkBayes 移植到 pymc3
Work with the actual hypotheses in pymc3 - Porting examples from ThinkBayes to pymc3
我正在将 Allen Downey 在 "Think Bayes" 中介绍的一些示例复制到 pymc3。
他的好书为我们提供了一些贝叶斯方法的介绍性示例,并且是使用 Allen 自己的库完成的。
有一个"Train Problem",你需要根据你在每列火车上看到的数字(每列火车编号从1到N)来预测公司拥有的火车数量
这个问题的可能性基本是
def likelihood(self, data, hypo):
if data > hypo:
return 0
return 1/hypo
for data in stream:
for hypo in hypothesis:
self.posterior[hypo] *= likelihood(data, hypo)
data
在你在火车上看到的数字中。
如何定义自定义可能性是 pymc3?我正在使用 DensityDist
创建我自己的似然函数,但我正在复制的这个函数取决于范围从 1 到 N(假设 N = 100)的假设,而在 pymc3 中我找不到一种从张量中获取 X 的方法。
此问题也称为 German Tank problem。由于在二战期间,盟军试图根据缴获的坦克序列号来查找德国坦克的数量。
我觉得可以通过以下模型解决问题
with pm.Model() as model:
N = pm.DiscreteUniform('N', lower=y.max(), upper=y.max()*10)
y_obs = pm.DiscreteUniform('y', lower=0, upper=N, observed=y)
trace = pm.sample(10000)
根据您的实际问题,您可以放宽离散假设(这是非常合理的)并使用像 Uniform
那样的连续分布。
with pm.Model() as model:
N = pm.Uniform('N', lower=y.max(), upper=y.max()*10)
y_obs = pm.Uniform('y', lower=0, upper=N, observed=y)
trace = pm.sample(1000)
放宽离散假设的一个好处是现在您可以使用 NUTS。相反,在之前的模型中,由于您使用的是离散变量,因此您只能使用 Metropolis。
我正在将 Allen Downey 在 "Think Bayes" 中介绍的一些示例复制到 pymc3。
他的好书为我们提供了一些贝叶斯方法的介绍性示例,并且是使用 Allen 自己的库完成的。
有一个"Train Problem",你需要根据你在每列火车上看到的数字(每列火车编号从1到N)来预测公司拥有的火车数量
这个问题的可能性基本是
def likelihood(self, data, hypo):
if data > hypo:
return 0
return 1/hypo
for data in stream:
for hypo in hypothesis:
self.posterior[hypo] *= likelihood(data, hypo)
data
在你在火车上看到的数字中。
如何定义自定义可能性是 pymc3?我正在使用 DensityDist
创建我自己的似然函数,但我正在复制的这个函数取决于范围从 1 到 N(假设 N = 100)的假设,而在 pymc3 中我找不到一种从张量中获取 X 的方法。
此问题也称为 German Tank problem。由于在二战期间,盟军试图根据缴获的坦克序列号来查找德国坦克的数量。
我觉得可以通过以下模型解决问题
with pm.Model() as model:
N = pm.DiscreteUniform('N', lower=y.max(), upper=y.max()*10)
y_obs = pm.DiscreteUniform('y', lower=0, upper=N, observed=y)
trace = pm.sample(10000)
根据您的实际问题,您可以放宽离散假设(这是非常合理的)并使用像 Uniform
那样的连续分布。
with pm.Model() as model:
N = pm.Uniform('N', lower=y.max(), upper=y.max()*10)
y_obs = pm.Uniform('y', lower=0, upper=N, observed=y)
trace = pm.sample(1000)
放宽离散假设的一个好处是现在您可以使用 NUTS。相反,在之前的模型中,由于您使用的是离散变量,因此您只能使用 Metropolis。