问题标签 [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 投票
2 回答
9409 浏览

python - 使用 pyMCMC/pyMC 将非线性函数拟合到数据/观察值

我正在尝试用高斯(和更复杂的)函数拟合一些数据。我在下面创建了一个小例子。

我的第一个问题是,我做得对吗?

我的第二个问题是,我如何在 x 方向添加一个错误,即在观察/数据的 x 位置?

很难找到关于如何在 pyMC 中进行这种回归的好指南。也许是因为使用一些最小二乘法或类似方法更容易,但我最终有很多参数,需要看看我们能如何约束它们并比较不同的模型,pyMC 似乎是一个不错的选择。

我意识到我可能不得不运行更多的迭代,最后使用老化和细化。绘制数据和拟合的图如下所示。

代码中的结果图。

pymc.Matplot.plot(MDL) 数字看起来像这样,显示出很好的峰值分布。这很好,对吧?

在此处输入图像描述

0 投票
0 回答
278 浏览

python - PyMC:估计总体参数,其中每个观察值是两个 Weibull 分布变量的总和

我有一个 n 观察的列表,每个观察都是两个 Weibull 分布变量的总和:

我的目标是:

1)估计两个威布尔分布的形状和尺度参数(shape1,scale1,shape2,scale2),

2) 对于每个观测值 x[i],估计 t1[i](并且由此得出 t2[i])。

旁白:每次观察x[i]是癌症诊断的年龄,t1[i]和t2[i]是肿瘤发展的两个不同时间段。实际模型也涉及到突变数据,但在我之前试试看,我想确保我可以使用 PyMC 来解决这个更简单的问题。)

我正在使用 PyMC2 进行这些估计,看起来运行收敛,但结果不正确。我不知道我的 PyMC 模型语法、MCMC 设置或两者都有问题。我尝试将这个建议改编为使用潜力对潜在变量进行建模。首先,我为每个观察定义 x[i] 和 t1[i]:

然后我为 t2[i] = x[i] - t1[i] 定义一个确定性:

最后我定义了 t2[i] 的潜力:

你可以在这里看到我的完整代码。我通过模拟 60 个独立观测值进行测试,shape1 = 1,scale1 = 30,shape2 = 6.5,scale2 = 10,并且我运行 AdaptiveMetropolis 的 1e5 次迭代。结果收敛到 shape1=1.94、scale1=37.9、shape2=0.55、scale2=36.1 的平均值,并且 95% HPD 不包括真实值。如该直方图所示,此结果分布甚至不在正确的范围内。(蓝色显示我使用的模拟数据 x[i],而红色显示与 MCMC 运行中的代表性迭代完全不同的推断分布。)

使用不同的随机种子再次运行,我得到 shape1=4.65,scale1=23.3,shape2=0.83,scale2=21.3。这种分布在某种程度上更接近事实。是否有某种方法可以更改 MCMC 设置以始终为此类问题获得不错的结果?非常感谢任何有关更有效地使用 PyMC 的建议。

更新——尝试了“辅助”MCMC 运行:

我还尝试通过使用接近真实值的值初始化人口级参数来帮助 MCMC 运行。结果稍微好一些,但我现在发现了系统偏差。下面的直方图显示了观测值(蓝色)与拟合分布(红色)的真实分布。右尾非常适合,但无法捕捉到左侧的尖峰。对于人口规模 n = 60 和 100,这种偏差始终存在。我不确定这更多是 PyMC 问题还是一般 MCMC 算法问题。

直方图

0 投票
0 回答
583 浏览

pymc3 - 如何使用 pymc 参数化概率图形模型?

如何使用 pymc 参数化概率图形模型?

假设我有一个带有两个节点的 PGMXY. 可以说X->Y是图表。

X取两个值{0,1}Y也取两个值{0,1}

我想使用 pymc 来学习分布的参数并用它填充图形模型以运行推理。

我能想到的方法如下:

这里Y0ValsY对应于Xvalues = 0Y1Vals的值并且是Y对应于Xvalues = 1 的值。

计划是从中抽取 MCMC 样本,并使用Y0_p和的方法Y1_p 填充离散贝叶斯网络的概率......所以概率表为P(X) = (X_p,1-X_p)while 的P(Y/X)

问题:

  1. 这是这样做的正确方法吗?
  2. 这不会变得笨拙,特别是如果我有X100 个离散值?或者如果一个变量有两个父级X并且Y每个有 10 个离散值?
  3. 有什么更好的我可以做的吗?
  4. 有没有什么好书详细说明我们如何进行这种互连。
0 投票
0 回答
763 浏览

python - PyMC:多个时间序列观察(改编自“黑客的贝叶斯方法”中的文本消息示例)

我正在尝试改编 Cameron Davidson-Pilon 的 《黑客贝叶斯方法》第 1 章“介绍我们的第一个锤子:PyMC”中的文本消息示例来处理多个观察结果。下面的解决方案似乎有效,但我是 pymc 的新手,我不确定这是在 pymc 中处理多个时间序列观察的好方法。任何建议将不胜感激!

回顾一下来自 Bayesian Methods for Hackers 的文本消息示例,观察结果包括 74 天的文本消息计数,如下图所示。

在此处输入图像描述

本书使用一个开关点参数 (tau) 和两个指数参数 (lambda1 和 lambda2) 对这个过程进行建模,它们分别控制 tau 之前和之后的泊松分布消息计数。对于这个例子,pymc 使用以下代码产生近似的解:tau=45、lambda1=18 和 lambda2=23,这与本书的代码几乎相同:

我的问题是:这应该如何适应处理多个观察?

我的解决方案出现在下面,并且似乎正在工作,但我想知道是否有更好的方法来模拟 pymc 中的问题。

首先,我使用 tau=45、lambda1=18 和 lambda2=23 生成五个随机观测值,如下所示:

运行上面的代码会产生一个(5 x 74)“观察”数组,代表五个不同人的数据,例如,超过 74 天,如下图所示。

在此处输入图像描述

下一步是我不确定的部分:这五个观察结果应该如何在 pymc 中建模?这是我所拥有的:

运行这个模型似乎会产生 tau、lambda1 和 lambda2 的预期结果,但我想知道这是否是处理多个观察的合适方法?

0 投票
1 回答
1519 浏览

python - 在 PYMC3 中求解 ODE

在这里,我的目标是估计由下式给出的阻尼谐振子的参数(伽马和欧米茄)

dX^2/dt^2+gamma*dX/dt+(2*pi*omega)^2*X=0。(我们可以在系统中添加高斯白噪声。)


通过将上面的代码保存为 DampedOscil_model.py,我们就可以如下运行 PYMC


而且效果很好(见下文)。

由 gama_true=2.0 和 omega_est=1.5 构造的真实信号与估计信号。估计的参数值为 gama_est=2.04 和 omega_est=1.49

现在我会将此代码转换为 PYMC3 以使用 NUTS 和 ADVI。

对于此代码,我收到以下错误: V1 = pm.Deterministic('V1', DHOS[0])

简而言之,我想知道如何将 PYMC 代码的以下部分转换为 PYMC3。

问题是,第一,确定性函数的论证在 PYMC3 中与 PYMC 不同,第二,在 PYMC3 中没有 Lambda 函数。

感谢您帮助解决 PYMC3 中的 ODE 以解决生物系统中的参数估计任务(从数据中估计方程参数)。

非常感谢您的帮助。

亲切的问候,

梅萨姆

0 投票
2 回答
10073 浏览

pymc - Pyro vs Pymc?这些概率编程框架之间有什么区别?

我使用了基于 Clojure 的“Anglican”,我认为这对我不利。糟糕的文档和太小的社区无法找到帮助。此外,我仍然无法熟悉基于 Scheme 的语言。所以我想把语言改成基于 Python 的东西。

也许 Pyro 或 PyMC 可能是这种情况,但我完全不知道这两者。

  • 这两个框架有什么区别?
  • 它们可以用于相同的问题吗?
  • 有没有比较突出的例子?
0 投票
1 回答
158 浏览

python-3.x - 如何将 PyStan 对象存储为二进制文件?

我想将中间文件存储在 Stan 的概率编程步骤中,例如fit对象,请参见下面的 SWE,以便我可以稍后加载它以供以后使用。Stan 用 C++ 编译模型,每次运行后,我不想再次重新运行模型,我想将它们存储到文件系统中以供以后分析。

使用 PyStan 存储 Stan 对象的最佳方式是什么?换句话说,如何将 stan 对象存储为二进制文件,以及存储结果的最可行方法是什么,以便以后无需再次运行它们?

小型工作示例(来源此处

0 投票
2 回答
5520 浏览

python - 错误:非常量表达式不能从类型“npy_intp”缩小到“int”

我正在尝试运行以下模型,但在编译过程中失败:

有这些错误:

我是 PyMC3 的新手。运行现有 PyMC3 示例时,我没有看到这些错误。我怀疑我看到这些是因为我使用的是多维格式(即,(G,K)),因为我还没有看到其他人使用这种格式(我可能是在强加我对 Stan 的熟悉程度)。

一般来说,我很难理解如何实现具有多个维度的多级模型。

知道是什么导致了我看到的错误吗?


版本

  • 蟒蛇3.6.3
  • numpy 1.14.5
  • Theano 1.0.2
  • pymc3 3.4.1
  • Mac OS 10.13.5

更新

我在 HPC 节点(CentOS 7)上安装了相同的软件包版本(通过conda),并且能够运行@colcarroll 建议的模型的修改版本。然而,在我的 OS X 机器上,我仍然看到上面指出的 Theano 编译错误,即使模型发生了变化。这可能是个clang问题吗?可以指定 Theano 使用的编译器吗?

0 投票
2 回答
150 浏览

machine-learning - 具有新的、看不见的观察的隐马尔可夫模型

我正在尝试使用隐藏的马尔可夫模型,但我的问题是我的观察结果是一些连续值的三元组(温度、湿度等)。这意味着我不知道我可能观察到的确切数量,因为它们不是离散的。这产生了我无法定义发射矩阵大小的问题。考虑离散值不是一种选择,因为在每个变量上使用必要的步骤,我得到了数百万个可能的观察组合。那么,这个问题可以用 HMM 解决吗?本质上,每次我得到新的观察结果时,发射矩阵的大小会发生变化吗?

0 投票
1 回答
38 浏览

algorithm - Probabilistic Perspective 是一种很好的商业预测客户偏好趋势的方法吗?

有一家公司,它为 8000 名客户提供 200 种产品。客户购买产品的平均数量为 10 个。一些大客户可能会购买 20 个或更多产品。

主流产品火爆,现在公司想用AI做大市场。

这是个问题,公司不向您提供客户数据。你必须谷歌一些东西来代替。

我的一般解决方案:如果客户 A 购买 a、b、c、d 和 e 产品,客户 B 购买 a、b、c 和 d 产品。如果我将 e 推广给客户 B,我可以轻松做到。

说真的,在我看来,它是一个 8000*n 的数据集,我首先需要做一个数据聚类,热图或树状图。然后对每个集群使用预测模型 p(e|a,b,c,d)。好吗?

您可以忽略以下句子。

你好!我是最后一个学期的信息系统学士,加入一个项目(一个新项目旨在让不同行业的学生合作),有一个对计算机科学一无所知的商业导师和不知道什么是R,什么的商业队友是SPSS。

我们的项目听起来不错,我们与客户进行了愉快的交谈,一切看起来都很好。我们现在开始做时间线。