首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用pymc3中的实际假设-将示例从ThinkBayes移植到pymc3

使用pymc3中的实际假设-将示例从ThinkBayes移植到pymc3
EN

Stack Overflow用户
提问于 2016-06-05 15:39:57
回答 1查看 152关注 0票数 2

我正在复制艾伦·唐尼( Allen )在“想想贝斯”(Think)中向pymc3展示的一些例子。

他的伟大著作为我们提供了一些关于贝叶斯方法的介绍性例子,并且是使用Allen自己的库完成的。

有一个“火车问题”,你需要根据你在每列火车上看到的数量来预测一家公司的列车数量(每列列车编号从1到N)。

这个问题的可能性基本上是

代码语言:javascript
运行
复制
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的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-18 00:48:57

这个问题也被称为德国坦克问题。自从第二次世界大战期间,盟军就试图根据被俘坦克的编号来寻找德国坦克的数量。

我认为这个问题可以用下面的模型来解决

代码语言:javascript
运行
复制
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那样的连续分布。

代码语言:javascript
运行
复制
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)

放松离散假设的一个好处是现在你可以使用坚果了。相反,在以前的模型中,由于您使用的是离散变量,所以您被限制在大都会。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37643697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档