pymc
使用 PyMC 进行贝叶斯建模。构建分层模型、MCMC(NUTS)、变分推断、LOO/WAIC 比较、后验检验,用于概率编程与推断。
PyMC 贝叶斯建模技能
技能概述
PyMC 技能提供完整的贝叶斯建模工作流程,帮助您使用 Python 构建概率模型、进行 MCMC 采样、执行模型诊断和预测推断。适用于科学研究、数据分析和机器学习中的不确定性量化任务。
适用场景
-
科学研究和数据分析:当您需要构建贝叶斯模型来量化研究中的不确定性,处理小数据集或缺失数据,或者需要为科学假设提供概率解释时,PyMC 提供从数据准备到模型验证的完整工作流程。
-
层级数据建模:当您的数据具有分组或多层结构(如重复测量、地理聚类数据),需要构建层级模型来捕捉组内和组间变异时,PyMC 的非中心化参数化方法能够有效避免采样发散问题。
-
模型比较和预测:当您需要比较多个竞争模型、进行后验预测检查、或者生成带有不确定性区间的预测结果时,PyMC 集成的 LOO/WAIC 模型比较和预测工具可以提供严谨的统计推断支持。
核心功能
-
贝叶斯模型构建与采样:支持线性回归、逻辑回归、泊松回归、时间序列等多种模型类型,使用 NUTS(No-U-Turn Sampler)算法进行高效的 MCMC 采样,并提供变分推断(ADVI)作为快速近似方案。
-
模型诊断与验证:提供自动化的诊断工具检查 R-hat、有效样本量(ESS)和发散问题,支持先验预测检查和后验预测检查,确保模型拟合结果的可靠性和稳健性。
-
概率分布库与模板:包含完整的概率分布参考指南,涵盖连续型、离散型、多变量分布以及时序分布,并提供线性回归和层级模型的完整代码模板,快速启动贝叶斯分析项目。
常见问题
PyMC 需要什么 Python 版本和依赖?
PyMC 6.0.1 需要 Python 3.12 或更高版本,使用 PyTensor 3 作为计算图后端。推荐使用 uv pip install "pymc[nutpie]==6.0.1" 安装,nutpie 扩展提供了更快的 Rust/Numba NUTS 实现。如需使用 NumPyro 或 BlackJAX 采样器,需要单独安装兼容的 JAX 依赖。
如何解决 MCMC 采样中的发散问题?
发散问题通常可以通过以下方法解决:提高 target_accept 参数到 0.95 或更高;对层级模型使用非中心化参数化;为参数添加更强的先验约束;检查模型设定是否有误。如果问题持续存在,可能需要重新参数化模型或使用变分推断进行初始化。
贝叶斯模型比较中的 LOO 和 WAIC 如何选择使用?
LOO(留一法交叉验证)通常更准确,但需要检查 Pareto-k 值(k < 0.7 时可靠)。WAIC(广义赤池信息量准则)计算更快,适合大规模模型比较。当 ΔLOO < 2 时模型相似,选择更简单的模型;ΔLOO > 10 时有强证据支持更好的模型。两者都需在拟合时包含 log_likelihood=True 参数。