在 PyMC Discourse 上提问#
本文档为那些在 PyMC Discourse 网站(PyMC 社区的主要交流渠道)上提问的人提供一些建议。如果您有关于建模、PyMC/PyTensor/ArviZ 使用或一般贝叶斯建模的问题,请创建一个新帖子,可能会有人帮助您。
本指南中的项目旨在最大限度地提高您快速获得良好答案的机会。
搜索#
PyMC Discourse 充满了已经收到有用答案的问题。因此,务必使用搜索功能,看看是否有人问过与您的问题类似的问题。尝试不同的关键词组合,因为过去的问题不一定包含一个好的标题。您还可以通过选择相关的标签(或按标签过滤搜索结果)来搜索 Discourse 中的主题。您还应该尝试搜索PyMC 文档,因为它涵盖了 PyMC API 和常见的用例。如果您找到一些相关但不能解决您特定问题的内容,请包含指向这些相关页面的链接,并解释您找到的内容为什么不能解决您的问题。
陈述您的问题#
描述您尝试完成什么,您如何尝试完成它,以及您遇到的任何问题。您期望什么,而实际发生了什么?提供足够的信息,以便其他人知道有用的答案是什么样的,但不要提供超过必要的信息。提供关于您尝试过的解决方案以及它们为什么没有解决您的问题的信息。是否有可能有人回答您写的问题,但没有提供有用的解决方案?(例如,问题:这是一个错误吗? 答案:不是。)如果是这样,您可能需要重新陈述您的问题。
最小工作示例#
请包含一个示例来演示您面临的问题。您的示例有几个关键属性
最小化
不要粘贴您的整个脚本。仅包含代码/模型/数据/处理中演示您的问题所必需的部分。不要包含不必要的导入语句、未使用的函数定义或不会执行的代码。
如果您当前在 Jupyter 笔记本中运行代码,请将其导出为可执行的 Python 脚本,或在新 Python 脚本中重现相关代码。
自包含
任何人应该都能够立即运行您的示例代码。这意味着您的示例应包含所有导入语句。您的示例应包含任何必要的自定义函数。如果您的代码依赖于从外部文件/站点加载的数据,请考虑在您的示例本身中创建或生成玩具数据
my_data = [[2, 7], [31, 9]]
mydata = np.random.default_rng(12345).random((2,2))
如果有(隐式)依赖于随机种子的调用,请显式设置种子
pm.sample(random_seed=12345)
相关输出
这包括错误消息、警告、诊断、统计数据和/或图表。描述这些结果中哪些与您的问题相关。您看到了什么您没有期望看到的?您没有看到什么您确实期望看到的?
您的示例应演示您的问题
在将您的代码精简到必要的程度后,请确保您仔细检查您的示例代码是否仍然产生您的问题。如果不是,也许您不小心解决了自己的问题!
一个好的标题#
您主题的标题至关重要,因为它是人们在您提交问题时首先看到的内容。如果问题看起来不相关或不有趣,或者如果人们无法理解您的问题可能是什么,那么您可能无法让人们阅读和回答您的问题。
突出显示您认为问题的关键方面。最后,如果您在总结问题的哪些方面重要时遇到困难,您可以尝试等到您写完整个主题,包括最小工作示例,然后再尝试写标题。
好的标题:
“为什么 pm.sample() 没有使用我所有的核心?”
“Multiprocessing BrokenPipeError: [Errno 32] Broken pipe”
“如何让 az.plot_dist() 显示先验?”
不太好的标题:
“我该如何进行贝叶斯推断?”
“有没有更好的方法来实现这个模型?”
“分层模型”
版本#
请提供有关您已安装的相关软件包的版本以及它们的安装方式的信息,包括
PyMC 版本
PyTensor 版本
Python 版本
系统等(例如,linux、Mac、Windows、jupyter、docker、Google Colab)
您如何安装 PyMC(例如,pip、conda、mamba)
一个例子#
这是一个帖子的示例,其中包含上述大多数特征(尽管不包括类别和标签等)。
Beta-Binomial 模型中的起始点失败#
我是 PyMC 和贝叶斯建模世界的新手。我用二项式似然函数和 Beta 先验分布构建了一个简单的抛硬币模型。当我运行模型时,采样似乎开始了,但随后生成一个错误,告诉我起始点失败。我尝试更改 Beta 先验中的 alpha
和 beta
参数,并将二项式转换为伯努利分布,但这些似乎都没有帮助。这是一个使用伯努利似然的最小示例
import pymc as pm
my_data = 5 * [-1]
with pm.Model() as model:
p = pm.Beta('p', alpha=1, beta=1)
y = pm.Bernoulli('y', p=p, observed=my_data)
idata = pm.sample()
运行此代码会生成以下错误
SamplingError: Initial evaluation of model at starting point failed!
Starting values:
{'p_logodds__': array(0.83748875)}
Initial evaluation results:
{'p': -1.56, 'y': -inf}
关于可能导致这种情况的原因有什么想法吗?
PyMC 版本:4.0.0
Aesara 版本:2.3.7
Python 版本:3.10.2
操作系统:linux
您如何安装 PyMC:conda
总结
在 Discourse 和 PyMC 文档中搜索信息
精确描述您的问题
提供一个自包含的代码片段,尽可能简洁地重现您的问题
使用描述性标题
提供有关相关软件包版本和您正在使用的平台的信息
仔细选择一个类别和一个或多个标签,以便合适的人找到您的问题