SuperAPI AI 工具集

pymc

数据与分析

查看项目

更新于 10-21 16:33

技能介绍

PyMC 是一个用于贝叶斯建模与概率编程的 Python 库。本技能帮助用户使用 PyMC 的现代 API(6.x 及以上版本)构建、拟合、验证并比较贝叶斯模型,包括分层模型、MCMC 采样(NUTS)、变分推断、后验预测检验以及模型比较(LOO、WAIC)。

版本与安装

资料显示 PyMC 6.0.1 为当前稳定版本,要求 Python 3.12+,使用 PyTensor 3 作为计算图后端,并默认使用 Numba 等编译后端。为获得可复现的本地环境,可固定版本安装:

uv pip install "pymc[nutpie]==6.0.1"

其中 nutpie 额外项启用更快的 Rust/Numba NUTS 实现。若使用 NumPyro 或 BlackJAX,需在同一环境中安装这些可选采样器依赖,并在项目锁文件中固定版本。

适用场景

该技能适用于:构建贝叶斯模型(线性/逻辑回归、分层模型、时间序列等);执行 MCMC 采样或变分推断;进行先验/后验预测检验;诊断采样问题(发散、收敛、ESS);使用信息准则(LOO、WAIC)比较多个模型;通过贝叶斯方法实现不确定性量化;处理分层/多水平数据结构;以有原则的方式处理缺失数据或测量误差。

标准贝叶斯工作流

资料强调不要先采样再检查。八步工作流为:数据准备(包括标准化预测变量,使先验可解释);在 pm.Model 上下文中构建模型(先验与似然);先验预测检验(确认先验蕴含合理数据);拟合模型(pm.sample() 并显式设置随机种子);检查诊断(R-hat、ESS、发散;发散会使拟合无效,应修正模型或重新参数化,而非仅提高 target_accept);后验预测检验(拟合模型能否复现观测数据);分析结果(后验摘要与区间);对新数据做预测(通过 pm.set_data 与后验预测采样)。

分布选择指南

先验方面:尺度参数(σ、τ)可用 pm.HalfNormal、pm.Exponential、pm.Gamma;无界参数可用 pm.Normal(标准化数据)或 pm.StudentT(抗离群值);正参数可用 pm.LogNormal、pm.Gamma;概率可用 pm.Beta(弱信息)或 pm.Uniform(非信息,慎用);相关矩阵可用 pm.LKJCholeskyCov(首选协方差先验)或 pm.LKJCorr。似然方面:连续结果用 pm.Normal 或 pm.StudentT;计数数据用 pm.Poisson、pm.NegativeBinomial、pm.ZeroInflatedPoisson、pm.HurdleNegativeBinomial;二值结果用 pm.Bernoulli;分类结果用 pm.Categorical。

采样与推断

MCMC 与 NUTS 为多数模型的默认推荐,示例参数为 draws=2000、tune=1000、chains=4、target_accept=0.9、random_seed=42。出现发散时可提高 target_accept;采样缓慢可用 ADVI 初始化;离散参数可用 pm.Metropolis()。变分推断(如 pm.fit(n=20000, method='advi'))速度快但为近似,可能低估不确定性,适合大模型或快速探索,也可用于初始化。

诊断与常见问题

技能提供 scripts/model_diagnostics.py,包含 check_diagnostics() 快速检查与 create_diagnostic_report() 综合报告(轨迹图、秩图、自相关图、能量图、局部 ESS 图、摘要统计 CSV)。常见问题:发散(提高 target_accept、使用非中心化参数化、加强先验、检查模型误设);低有效样本量(增加 draws、重新参数化、对相关预测变量使用 QR 分解);高 R-hat(延长链、检查多峰、用 ADVI 改善初始化);采样缓慢(ADVI 初始化、降低模型复杂度、增加并行 cores/chains、必要时用变分推断)。

最佳实践

建模时标准化预测变量、使用弱信息先验、使用命名维度 dims、分层模型采用非中心化参数化、拟合前做先验预测检验。采样时至少 4 条链、target_accept=0.9 为基线、包含 log_likelihood=True 以便模型比较、设置随机种子。验证时先检查诊断再解释、做后验预测检验、适当比较多个模型、报告不确定性(HDI 区间而非仅点估计)。工作流上从简单开始逐步增加复杂度,并记录假设与先验选择。

配套资源

参考资料包括 distributions.md(按类别组织的分布目录)、sampling_inference.md(采样算法与变分推断详解)、workflows.md(常见模型类型的工作流示例与代码模式)。脚本包括 model_diagnostics.py 与 model_comparison.py(基于 PSIS-LOO ELPD 的模型比较、LOO 可靠性检查、模型平均)。模板包括 linear_regression_template.py 与 hierarchical_model_template.py。

其他说明

PyMC 与 ArviZ 集成用于可视化与诊断;PyMC 6 / ArviZ 1 使用 xarray DataTree,同时保留 .posterior、.posterior_predictive 等熟悉分组。可用 pm.model_to_graphviz(model) 可视化模型结构,用 idata.to_netcdf('results.nc') 保存结果、az.from_netcdf('results.nc') 加载。超大模型可考虑小批量 ADVI 或数据子采样。

代理操作流程与完整性规则

操作流程包括:检查环境与库版本、确认数据形状类型与缺失值;确认输入格式、标识符与参数,不猜测影响结果的取值;先在小样本上试运行检查时间与内存;执行完整任务;用留出数据、固定随机种子与合适指标验证结果并检查泄漏、报告不确定性;报告运行内容、检查项与仍不确定之处。遇到内存不足或执行缓慢时,可子采样、分块或惰性计算、缩小模型并告知用户;若指令中的函数、标志或端点在当前安装版本中不存在,应查阅该版本文档并告知用户,绝不虚构 API;输入或参数不明确时应询问用户或明确说明假设。完整性规则要求:不编造结果、参数、标识符、引用或统计量;不报告本次会话未计算的指标;版本相关细节可能过时,应以已安装版本的官方文档为准;涉及费用、共享 GPU 或云配额、个人或患者数据、不可撤销操作时须先询问。