问题标签 [probabilistic-programming]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
360 浏览

python - 如何找到三个连续随机变量的贝叶斯网络的联合概率

贝叶斯网络

对于像上述有向图这样的网络,我如何找到三个连续随机变量 A、B、C 的联合概率。

0 投票
0 回答
226 浏览

pymc - 具有随机游走或高斯过程的缓慢的潜在趋势

我正在尝试将 PyMC3 模型拟合到一些有关随着时间推移的销售数据。这是一个简短的描述:

  • N 个销售人员每人每周销售一定数量的小部件
  • 我们假设每个销售人员每周以不同的平均速度销售小部件,并将销售人员 i 称为 beta_i
  • 我们观察到的数据被假设为~Poisson(beta_i)。

每周平均销售数据以直方图的形式绘制,顶部采用对数正态拟合,让您了解销售人员每周小部件销售的分布情况。 在此处输入图像描述

在第一个场景中,我得到了我认为合理的 beta 集,尽管它们看起来并不是特别正常: 在此处输入图像描述

因为我们希望推断出所有销售人员共有的潜在趋势(类似于“经济”),所以我们尝试添加一些东西。我们的第一次尝试让“经济”只是时间的线性函数,从截距值 1 开始,并且导数 gamma > 0(gamma 是半正态的sd=0.5)。然后我们有我们的数据 ~Poisson(beta_i * (1 + gamma))。在这种情况下,贝塔系数变化不大,我们确实推断出一些关于“经济”的信息,尽管它的影响相当微弱。 在此处输入图像描述

我希望用随机游走或高斯过程来代替它,以允许“经济”在时间上稍微平稳地变化,但具有任意形状。理想情况下,它会从 0 值开始,然后去任何需要去的地方捕捉所有销售人员共享的潜在趋势,再次使用数据 ~Poisson(beta_i * (1 + gamma))。这是我们的模型。

其中observed_sales是销售数量的整数数组,形状为(n_weeks, n_salespeople)

首先,我不确定我是否正确指定了这个模型。没有“经济”,我推断出一组合理的 beta (尽管它看起来不像对数正常,如第二个屏幕截图所示)。然后,无论 sd 变得多么小,我们得到的随机游走一点都不平滑;由于我不确定的原因,我经常收到一条关于“质量矩阵在对角线上包含零”的消息。最后,即使在开始时,如果我没有在观察到的数据中添加一个小因素,我就会得到无限的概率......为什么会这样?

所以,TL;DR:我对概率编程相当陌生,我很确定出了什么问题,但我不确定是什么。非常感谢任何输入!

0 投票
2 回答
80 浏览

r - 函数组合的方差

我一直在使用utils包中的奇妙功能combn。此函数创建所有可能的组合,无需重复 Combn 描述。我将介绍我需要做的函数的一种用途,但它没有在combn函数中定义。我很想用一个很好的例子来介绍它。然而,我们想要实现的实际目标更复杂,需要更多的数据来实现。

我们想玩一个只有3 个人可以玩的游戏。不过我们是4个人。我们想知道玩游戏的所有可能组。参与者的名字是AlexDavidJohnZoe。可能的组合是:

但是,我们遇到了问题,因为Alex 与 John 的关系并不好。因此,我们不想将它们都包含在 group 中。这样我们就可以为只能选择其中一个的人创建群组。

我正在寻找一个函数,它允许我做与 combn 相同的操作,但通过变量 only.one.per.group 限制组合。命名我期待使用 var.combn 的函数,代码将是:

很长一段时间以来,我一直在寻找类似的功能。所以,如果你能告诉我一个函数来做这件事,或者你想到的任何方式来做这件事,那将是非常有用的。

我希望你喜欢这个例子,我很想知道如何去做。

0 投票
1 回答
127 浏览

pymc3 - Stan 和 PyMC3 中的影响图/决策模型

是否可以在 Stan 或 PyMC3 中编写决策模型?我的意思是:我们不仅定义随机变量的分布,还定义决策和效用变量,并确定最大化预期效用的决策。

我的理解是 Stan 比 PyMC3 更像是一个通用优化器,因此这表明决策模型将在其中更直接地实现,但我想听听人们怎么说。

编辑:虽然可以枚举所有决策并计算它们相应的预期效用,但我想知道更有效的方法,因为决策的数量可能组合起来太多(例如,从包含数千种产品的列表中购买多少物品)。影响图算法利用模型中的因式分解来识别允许仅对较小的相关随机变量集进行决策计算的独立性。我想知道 Stan 或 PyMC3 是否会做这种事情。

0 投票
1 回答
63 浏览

tensorflow-probability - 对具有未知数量结构变化的 Poisson RV 进行建模

我有一些过去 365 天的用户交互计数数据。我有理由相信已经发生了一些改变用户交互速度的事件。模型如下:

假设

  • 每日计数数据(本地)从带有参数的泊松分布中提取lambda
  • 之间有0结构n<365变化,即lambda变化
  • 这些变化可以在 365 天期间的任何时间发生

期望的答案

  • 可能的结构变化发生了多少次?
  • 这些变化是什么时候发生的?

我想用tensorflow_probability. 本章结尾处描述的模型似乎是一个很好的起点。但是,结构更改的数量被硬编码为 1。如何扩展此模型以处理未知数量的更改?

编辑

这是上述代码的修改版本。它允许任意数量的开关点。受到 Dave Moore 在下面的回答的启发,我允许tau通过乘以 2 来获得“越界”元素。从风格上讲,我关心 的计算indices,因为我认为理解正在发生的事情有点令人困惑。但是,我想不出更好的方法来做到这一点。从功能上讲,我担心越界值可能对对数概率产生影响。

0 投票
1 回答
66 浏览

prolog - DTProbLog 查询

我在从位于https://bitbucket.org/problog/problog/src/develop/的 bitbucket 存储库下载的 ProbLog 版本 2.1.0.34 中使用 DTProblog 。要运行使用 dtproblog 的程序,我在终端上键入

$ problog dt program.pl

查看位于 https://bitbucket.org/problog/problog/src/develop/test/dtproblog/viralmarketing.pl的 bitbucket 存储库中的示例, 我看到允许多个查询,例如dtproblog_ev/2ecc ...我该如何运行来自命令行的那些查询之一?

我也尝试过使用

$ problog 外壳

但是当我尝试使用consult/1https://problog.readthedocs.io/en/latest/cli.html#interactive-shell-shell)加载程序时出现错误:

?- 咨询('viralmarketing.pl')。

追溯....

TypeError: _builtin_consult() 至少需要 2 个参数(给定 3 个)

谢谢您的帮助。

0 投票
1 回答
27 浏览

distribution - 如何计算相关高斯变量之和的参数?

在此处输入图像描述

对于独立案例来说是微不足道的。

根据 Wiki,如果它们相关,则 Z 的协方差为在此处输入图像描述

平方根中的最后一项实际上是 X 和 Y 的协方差,即 cov(X,Y)。我只是不知道如何计算这个术语。你有什么想法?

0 投票
0 回答
85 浏览

pytorch - Pyro:使用 SVI 的简单逆图形示例不起作用

我是 pyro 的新手,并试图实现一个简单的逆图形问题,涉及估计在黑白 32x32 图像上渲染的三角形点的坐标。

所以我定义了一个生成模型,它生成 3 个均匀随机的点,将它们渲染成图像并观察结果。然后我使用SVI自动引导 ( AutoMultivariateNormal) 来尝试估计固定三角形图像的点。 SVI似乎运行良好并且ELBO损失减少,但是当尝试从后验采样时,我得到的只是均匀随机的点,没有学习的迹象。

我在 Jupyter 笔记本中的代码与结果:

截图#1

截图#2

截图#3

我在这里想念什么?

0 投票
2 回答
645 浏览

r - 在 R 中模拟肥尾数据

我需要在 R 中模拟具有肥尾分布的数据,并且在我不确定从哪里开始之前从未模拟过数据。我查看了该FatTailsR软件包,但文档非常神秘,我似乎找不到任何明显的教程。

基本上,我想创建一个包含两列(X 和 Y)、包含 10,000 个观察值的人工数据框,该数据框使用以下逻辑/迭代:

  • 对于 X 的每个观测值,Y 为 0 的概率为 75%,Y 为 1 的概率为 25%(为每个观测值分配 0 或 1)。
  • 接下来,仅查看 Y 为 1 的 X 的观测值。在这些观测值(原始数据集的 25%)中,有 25% 的 Y 为 2。
  • 在 Y 为 2 的观测值中,25% 的值上升到 3。
  • 并以此类推直到 Y = 10。

任何指导将不胜感激。包括要检查的软件包和功能的建议(可能类似于rlnorm?)

0 投票
0 回答
61 浏览

bayesian - 使用马尔可夫链蒙特卡罗为连续和二元预测变量的混合定义先验以运行贝叶斯线性回归

我正在尝试在 PyMC3 中使用马尔可夫链蒙特卡罗来运行贝叶斯线性回归。我正在尝试为我的问题设置先验,其中我的响应是一个连续变量,并且我有 12 个预测变量(8 个二进制和 4 个连续变量)。我如何定义这个问题的先验?

我尝试将先验设置为 8 个二项式分布和 4 个连续变量,但我无法以正确的方式构建方程。

我从 pymc3 检查了以下代码

在上面的代码中,'family = pm.glm.families.Normal()' 是否将所有参数都设置为均值零和 sd=1 的正态分布?我们如何更改此代码以先声明 8 个二项式和 4 个连续变量?