什么时候用
先判断任务是否合适
- 需要用后验分布表达参数不确定性而非单一点估计
- 观测数据较少,希望引入先验知识约束参数估计
- 需要比较多个竞争模型的预测能力(WAIC/LOO)
- 想通过先验预测检查确认模型在未观测数据下的行为是否合理
先准备什么
材料越清楚,结果越有用
- •观测数据(x, y),缺失值可让PyMC自动填补
- •对待估参数的先验分布形式及其超参数
- •模型结构假设——哪些是参数、哪些是似然、哪些是确定性关系
- •选择采样策略:MCMC精确但慢,变分推断快速但是近似
它会怎样推进
从材料到可以检查的结果
- 01
声明模型
用with块定义参数先验、似然和数据容器,指定维度坐标
- 02
选择推断方法
默认NUTS连续采样,离散变量用Metropolis,大数据用ADVI变分推断
- 03
运行采样
设置链数、采样量、目标接受率,监控收敛诊断(R-hat、ESS)
- 04
检查后验
查看摘要表(均值/HDI/ESS/R-hat),画轨迹图和后验密度图
- 05
模型验证
做后验预测检查(PPC),确认模型能生成与观测数据特征相似的样本
- 06
预测新场景
用set_data替换输入,或do操作做反事实干预推演
第一次这样开始
把仓库地址直接交给 AI
先让 AI 说明环境和风险,再完成最小安装验证。跑通以后,再把自己的真实材料放进去。
第一次直接复制
帮我安装这个库:https://github.com/pymc-devs/pymc 安装前先告诉我需要什么环境,安装后帮我跑通一个最小示例。
结果出来后
先看这些检查点
- R-hat是否接近1.0(<1.01),ESS是否足够大
- 发散(divergence)数是否接近0——大量发散说明后验几何不良
- 先验预测是否覆盖了合理的数据范围
- 后验预测能否重现观测数据的关键统计量
常见误区
这些判断仍由你负责
- 不检查收敛诊断就把采样结果当作可信后验
- 在强相关参数上使用MeanField ADVI——它假设参数独立,会低估方差
- 直接用MAP点估计代表后验——多维/非对称后验的众数不具有代表性
- 模型比较时只看WAIC/LOO的数值而不看ELPD差的标准误
技术依据
查看能力拆解、验证范围与来源
技术依据
查看能力拆解、验证范围与来源
- 01
MCMC后验采样
给定一个已声明的 pymc 概率模型,用 MCMC(主要是 NUTS,辅以 HMC、Metropolis、Slice 等步骤方法)从后验分布抽取样本,产出带收敛诊断(R-hat、ESS、发散、树深度)的 InferenceData/DataTree 对象,让研究者据此做后验推断和预测。
- 02
先验后验预测采样
给定一个已声明的 pymc 模型(和/或其后验样本),从前验预测分布或后验预测分布生成前向样本,用于先验合理性检查(数据未观测前的先验预测是否合理)、后验预测检查(模型能否重现观测数据的特征)和预测(在新数据/新坐标下基于后验做情景预测与因果干预推演)。
- 03
变分推断
给定一个已声明的 pymc 概率模型,用变分推断(VI)快速估计后验的近似分布,用一个小批量大样本数据下可扩展的优化过程替代 MCMC 采样,产出 Approximation 对象(可从中抽取近似后验样本),适用于大数据、快速探索或作为 NUTS 的初始化。
- 04
后验分析与诊断
给定 pymc 采样产出的后验 InferenceData,做后验摘要(均值、标准差、HDI、分位数)、收敛诊断(R-hat、ESS、发散、树深度)、模型比较(WAIC、LOO)和后验报告/绘图,让研究者判断模型是否可信、参数后验如何解释、多个候选模型哪个更优,并产出可进入论文或报告的统计结果。
| 能力 | 主要输入 | 主要输出 | 人工检查 |
|---|---|---|---|
MCMC后验采样源码已核对 |
|
|
|
先验后验预测采样源码已核对 |
|
|
|
变分推断源码已核对 |
|
|
|
后验分析与诊断源码已核对 |
|
|
|
概率模型构建源码已核对 |
|
|
|
处理机制
- 01
核心处理链
用代码声明贝叶斯概率模型,通过MCMC或变分推断估计参数后验分布。
已核对范围
- 读取 pymc/sampling/mcmc.py 的 sample()、initnuts()、sampleexternalnuts、samplemany、sample
- 读取 pymc/stepmethods/ 的 NUTS、HamiltonianMC、Metropolis、BinaryMetropolis、BinaryGibbsMetropolis、CategoricalGibbsMetropolis、DEMetropolis、DEMetropolisZ、Slice、CompoundStep、BlockedStep
- 读取 pymc/stats/convergence.py 的 runconvergencechecks、SamplerWarning、warndivergence、warntreedepth
- 读取 pymc/tuning/starting.py 的 findMAP、pymc/tuning/scaling.py 的 mass matrix 辅助函数
- 读取 pymc/backends/ 的 NDArray、MultiTrace、toinferencedata
- 读取 pymc/sampling/forward.py 的 draw、samplepriorpredictive、sampleposteriorpredictive
- 读取 sampleposteriorpredictive 的 samplevars/freezevars/predictions/extendinferencedata 机制
- 读取 README.rst 线性回归样例的 priorpredictive - do/observe - posteriorpredictive - predictions 链路
仍待核对
- 未运行本机 pm.sample smoke
- 未逐个核对 NUTS 内部 leapfrog/树构建/对偶平均的数值细节
- 未覆盖外部采样器(nutpie/numpyro/blackjax)的安装与调用实测
- 未运行本机 prior/posterior predictive smoke
- 未核对 ImplicitFreezeWarning 的触发与 freezevars/samplevars 的完整交互
- 未覆盖 pm.Data + setdata 在预测新坐标时的完整字段变化
- 未运行本机 pm.fit smoke
- 未核对 opvi/operators 的算子(KL、KS)内部实现
读取版本
c870b5c3f88b30ac6db6211711f12c6e7c2d6ddc许可
Apache-2.0
最近核对
内容 2026-07-10
Stars 2026-07-11
相关文章
科研之我见
AI 科研全流程怎么搭,我梳理出三个核心入口
每天开工先固定阶段入口、材料入口和验证入口,把庞大的科研全流程收缩成一段可执行、可检查的任务。
查看内容