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

probability - PyMC3 在多个离散父节点上调节随机变量

我最近开始使用 PyMC3 进行概率编程。在我的场景中,我有 3 个随机变量:On、Triangle 和 X,这样 X 取决于 Triangle 和 On。Triangle 和 On 都遵循 Bernoulli 分布,并且根据它们所取的值,遵循 Normal 的 X 的值会发生变化。

我写了一些模拟代码来测试这个概念,代码不好,主要是因为你不能调用numpy.isnan()PyMC3 发行版。我刚开始在这个框架中工作,我知道我不是在编写可以运行的代码,但是我在这里发布这个,以便你可以看到我做了什么。

我不确定如何指定 X 对 Triangle 和 On 的条件依赖。大家的任何想法都将不胜感激。

0 投票
0 回答
146 浏览

bayesian - 添加新发行版时出现类型 FreeRV 的问题

我正在尝试通过包装 Agner Fogs c++ 版本( https://www.agner.org/random/ )向 PyMC3(Wallenius 非中心超几何)添加一个新的离散分布。

我已经成功地将相关函数放在了一个 c++ 扩展中,并添加了广播,使其表现得像 scipy 的发行版。(目前广播是在 Python 中完成的。.. 稍后将尝试 xtensor-python 绑定以在 c++ 中实现更高性能的矢量化。)

我遇到了以下问题:当我在模型上下文中实例化新分布的 RV 时,我得到一个“TypeError:需要一个整数(获取类型 FreeRV)”,其中“值”传递给新分布的 logp() 函数。

我知道 PyMC3 可能需要将 RV 连接到函数,但我找不到将它们转换为我的新函数可以使用的东西的方法。

任何有关如何解决此问题的提示或向 PyMC3 添加新发行版的一般信息或发行版的内部工作都会非常有帮助。

提前致谢!简

编辑:我注意到 FreeRV 继承自 theanos TensorVariable,所以我尝试调用 .eval()。这会导致另一个错误,即没有连接输入。(我现在没有确切的错误信息)。令我困惑的一件事是为什么在设置模型时在变量的实例化时调用 logp ...

0 投票
0 回答
70 浏览

text - 如何在太多文本中检测重复的“单词序列”?

问题是在大量文本片段中检测重复的单词序列。这是一个近似和效率问题,因为我要处理的数据非常庞大。我希望在索引文本时为文本分配编号,如果它们具有与已经索引的文本匹配的部分。

例如,如果我现在正在索引的 TextB 具有与数据库中的其他 2 个文本匹配的部分。我想给它分配一个数字,p1。如果该匹配部分更长,那么我希望它分配 p2 (p2>p1)。如果 TextB 的匹配部分只有 1 个其他文本,那么它应该给出 p3 (p3 < p1)。这两个参数(序列的长度,匹配组的大小)将具有最大值,这意味着在超过这些最大值之后,分配的数量将停止增加。

我可以想办法以蛮力做到这一点,但我需要效率。我的老板指示我在那里学习 NLP 和搜索解决方案,我正计划通过这个斯坦福视频讲座

但我怀疑这是否是正确的方法,所以我想问问你的意见。

示例:文本 1:“我想成为一名艺术家并环游世界。” 文本 2:“我想成为一名音乐家。” 文本3:“环游世界。” 文本 4:“她想环游世界。”

有了这些文本,我想要一个数据看起来像这样:-“我想成为”,2 个实例,[1,2] -“环游世界”,3 个实例,[1,3,4]

在有了这些数据之后,最后,我想做这个过程(在有了之前的数据之后,这可能是微不足道的):(一个名为 A 的矩阵在必要的索引处有一些值。我会在一些试验后确定这些。)匹配组有数字值,它们从矩阵 A 中检索。组 1 = A(4,2) % 4 个单词,2 个实例 组 2 = A(3,3) % 3 个单词,3 个实例

然后我将为每个文本分配一个数字,这是它们所在组的数字之和。

我的问题是以有效的方式形成这个数据集。

0 投票
2 回答
72 浏览

julia - Gen:如何将多个生成函数轨迹组合成一个高阶生成函数?

我正在阅读https://github.com/probcomp/gen-quickstart上的“Gen 建模简介”笔记本

第 5 节(调用其他生成函数)要求“构建一个数据集,其中线或正弦波模型是最好的是模棱两可的”

我很难理解如何使用组件函数的跟踪(和返回)来创建我可以使用的有意义的高阶跟踪。

对我来说,最直接的“模棱两可”模型是line(xs).+sine(xs). 所以我Gen.simulate编辑linesine获取痕迹并将它们添加在一起,如下所示:

这显然是错误的,我知道我在 Gen.

我希望能够从组合中内省 sine/line_model 的迹线,并对迹线进行元素添加以获得新的迹线。并且不必随机选择接近:intercept、:phase 等的数字,因此我可以稍后将其包含在我的跟踪中。

顺便说一句,当我这样做时:

我明白了 功能尝试失败

请帮忙谢谢!

0 投票
2 回答
597 浏览

machine-learning - 概率编程与概率机器学习有什么区别?

我试图围绕概率编程的概念来思考,但我读的越多,我就越感到困惑。

我此时的理解是概率编程类似于贝叶斯网络,只是被翻译成编程语言来创建自动推理模型?

我有一些机器学习的背景,我记得一些机器学习模型也输出概率,然后我遇到了概率机器学习这个术语......

两者有区别吗?或者它们是类似的东西?

感谢任何可以帮助澄清的人。

0 投票
1 回答
86 浏览

scala - 有什么办法可以在 Scala 中重写这行代码?

我尝试使用我的函数 sum_ 重写这行 Scala + Figaro,但我有一些错误。

它使用 reduce() 方法来计算总和。我想重写这一行,但由于 Chain 返回类型 [Double, Int] 而出现错误:

0 投票
1 回答
277 浏览

python - 使用 dirichlet 先验从 pyMC3 绘制分类向量

我想绘制分类向量,其先验是狄利克雷分布的乘积。类别是固定的,类别向量中的每个元素对应于不同的 Dirichlet 先验。这是一个长度为 33 的类别向量,有 4 个类别,使用 Dirichlet 进行先验设置。

然而,这种方法很麻烦,因为我必须做一些数组索引才能得到分类向量。有没有更好的方法来做到这一点?

0 投票
1 回答
324 浏览

machine-learning - 连续变量的贝叶斯网络结构学习python包

我一直在寻找用于连续变量的贝叶斯网络结构学习的 python 包。我一直在使用 Pomegranate,但这似乎只适用于连续变量。

0 投票
1 回答
67 浏览

tensorflow - 在 TensorFlow Probability 中实现“观察”行为

考虑observe概率编程中语句的定义,如 [1] 中所定义:

观察语句阻止不满足布尔表达式 E 的运行,并且不允许这些执行发生。

现在,考虑以下理论程序:

它应该从截断的Normal(0, 1)分布中返回值。

因此,我的问题是:如何observe在 TensorFlow Probability 中实现,或者它的等价物是什么?请注意,observe' 参数应该是任何(符号)布尔表达式E:(例如lambda x: x > 0)。

注意:当然,对于上面的程序,可以使用HalfNormal发行版,但我将它用于observe.


[1] 戈登、安德鲁 D. 等人。“概率编程。” 软件工程的未来论文集。2014. 167-181。

0 投票
1 回答
41 浏览

python - 使用 pymc3 对部分数据拟合线性模型,对其余数据拟合指数增长模型

让我们生成一些测试数据:

它看起来像这样:

在此处输入图像描述

我想将线性模型 ( y = a + bx) 拟合到数据的第一部分,将指数增长模型 ( y = exp(a + bx)) 拟合到数据的第二部分。但是让我们假装我不知道,先验,切换点在哪里。

我尝试在 pymc3 中编写此模型:

当然,这仅适用于整个数据的两个模型。我没有以正确的方式组合它们。

指定我想linear_model在之前switchpointexponential_model之后使用的正确方法是什么?