问题标签 [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.
probability - PyMC3 在多个离散父节点上调节随机变量
我最近开始使用 PyMC3 进行概率编程。在我的场景中,我有 3 个随机变量:On、Triangle 和 X,这样 X 取决于 Triangle 和 On。Triangle 和 On 都遵循 Bernoulli 分布,并且根据它们所取的值,遵循 Normal 的 X 的值会发生变化。
我写了一些模拟代码来测试这个概念,代码不好,主要是因为你不能调用numpy.isnan()
PyMC3 发行版。我刚开始在这个框架中工作,我知道我不是在编写可以运行的代码,但是我在这里发布这个,以便你可以看到我做了什么。
我不确定如何指定 X 对 Triangle 和 On 的条件依赖。大家的任何想法都将不胜感激。
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 ...
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 个实例
然后我将为每个文本分配一个数字,这是它们所在组的数字之和。
我的问题是以有效的方式形成这个数据集。
julia - Gen:如何将多个生成函数轨迹组合成一个高阶生成函数?
我正在阅读https://github.com/probcomp/gen-quickstart上的“Gen 建模简介”笔记本
第 5 节(调用其他生成函数)要求“构建一个数据集,其中线或正弦波模型是最好的是模棱两可的”
我很难理解如何使用组件函数的跟踪(和返回)来创建我可以使用的有意义的高阶跟踪。
对我来说,最直接的“模棱两可”模型是line(xs).+sine(xs)
. 所以我Gen.simulate
编辑line
并sine
获取痕迹并将它们添加在一起,如下所示:
这显然是错误的,我知道我在 Gen.
我希望能够从组合中内省 sine/line_model 的迹线,并对迹线进行元素添加以获得新的迹线。并且不必随机选择接近:intercept、:phase 等的数字,因此我可以稍后将其包含在我的跟踪中。
顺便说一句,当我这样做时:
请帮忙谢谢!
machine-learning - 概率编程与概率机器学习有什么区别?
我试图围绕概率编程的概念来思考,但我读的越多,我就越感到困惑。
我此时的理解是概率编程类似于贝叶斯网络,只是被翻译成编程语言来创建自动推理模型?
我有一些机器学习的背景,我记得一些机器学习模型也输出概率,然后我遇到了概率机器学习这个术语......
两者有区别吗?或者它们是类似的东西?
感谢任何可以帮助澄清的人。
scala - 有什么办法可以在 Scala 中重写这行代码?
我尝试使用我的函数 sum_ 重写这行 Scala + Figaro,但我有一些错误。
它使用 reduce() 方法来计算总和。我想重写这一行,但由于 Chain 返回类型 [Double, Int] 而出现错误:
python - 使用 dirichlet 先验从 pyMC3 绘制分类向量
我想绘制分类向量,其先验是狄利克雷分布的乘积。类别是固定的,类别向量中的每个元素对应于不同的 Dirichlet 先验。这是一个长度为 33 的类别向量,有 4 个类别,使用 Dirichlet 进行先验设置。
然而,这种方法很麻烦,因为我必须做一些数组索引才能得到分类向量。有没有更好的方法来做到这一点?
machine-learning - 连续变量的贝叶斯网络结构学习python包
我一直在寻找用于连续变量的贝叶斯网络结构学习的 python 包。我一直在使用 Pomegranate,但这似乎只适用于连续变量。
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。