术语表#
PyMC 文档和示例中使用的常见术语词汇表。
- No-U-Turn Sampler#
- NUTS#
一种 哈密顿蒙特卡洛 的扩展,算法上设置了可能的候选点,这些点覆盖了目标分布的广泛区域,当它开始回溯并重复其步骤时自动停止。
- tensor_like#
任何可以解释为
TensorVariable
的标量或序列。除了 TensorVariables 之外,这还包括 NumPy ndarrays、标量、列表和元组(可能是嵌套的)。pytensor.tensor.as_tensor_variable
接受的任何参数都是 tensor_like。import pytensor.tensor as pt pt.as_tensor_variable([[1, 2.0], [0, 0]])
TensorConstant(TensorType(float64, shape=(2, 2)), data=array([[1. ... [0., 0.]]))
- 之前#
贝叶斯统计学原则上允许我们将关于问题结构的全部信息纳入模型中。我们可以通过假设模型参数的先验分布来实现这一点。先验表示在考虑数据之前参数值的合理性。先验乘以 似然 产生 后验。
先验信息量可以在完全不确定到相对确定之间连续变化。一个信息丰富的先验可能编码了该参数可能值范围的已知限制。
为了理解先验和似然的含义,我们可以在看到任何数据之前,通过从先验预测分布中抽取样本来模拟模型的预测。
关于先验的深入指南,可以参考Richard McElreath的《Statistical Rethinking》第二版,特别是第2.3章。
- 似然性#
关于似然的观点有很多,但从概念上我们可以将其视为给定参数的数据的概率。或者换句话说,作为数据可能产生的方式的相对数量。
要深入展开这一概念,请参阅 Richard McElreath 的《Statistical Rethinking 第二版》,特别是第二章。
关于基于问题的材料,请参阅 Allen B. Downey 的《Think Bayes 2e: 贝叶斯统计简单化》
对于单变量、连续场景,请参阅 calibr8 论文:Laura Marie Helleckes, Michael Osthege, Wolfgang Wiechert, Eric von Lieres, Marco Oldiges 的生物技术中的贝叶斯校准、过程建模和不确定性量化。
- 函数式编程#
函数式编程是一种编程风格,它倾向于使用具有明确且独立输入和输出的基本函数。这与依赖于未明确作为输入传递的变量(例如在方法内部访问
self.variable
)或改变输入或其他状态变量的函数或方法形成对比,后者不是返回新的独立变量作为输出,而是就地修改输入或其他状态变量。- 分层常微分方程#
个人、团体或其他级别的 常微分方程 计算。
- 可信度#
一种用于预测不确定未来事件的统计推断形式
- 后验#
贝叶斯推断的结果是一个后验分布,它描述了在给定观测数据的情况下,每一种可能的参数值组合的相对可能性。我们可以将后验视为模型在看到数据后更新的 先验。
当使用数值方法获得后验时,我们通常需要首先诊断计算近似值的质量。这是必要的,例如,像 MCMC 这样的方法只有渐近保证。在贝叶斯设置中,可以通过从后验预测分布中采样来模拟预测。当这些预测用于通过与用于推断的观测数据进行比较来检查模型的内部一致性时,该过程被称为后验预测检查。
一旦你对模型满意,后验分布可以被总结和解释。后验的常见问题包括:定义边界的区间、定义概率质量的区间,以及点估计。当后验与先验非常相似时,可用数据并不包含关于感兴趣参数的很多信息。
关于生成和解释后验样本的更多内容,请参见Richard McElreath所著的《Statistical Rethinking》第二版,第三章。
- 哈密顿蒙特卡洛#
- HMC#
一种用于获取随机样本序列的 马尔可夫链蒙特卡罗 方法,这些样本序列会收敛于按照目标概率分布分布。
- 常微分方程#
- ODE#
一种包含一个或多个独立变量的函数及其导数的微分方程类型
- 广义泊松分布#
泊松分布 的推广,具有两个参数 X1 和 X2,作为广义负二项分布的极限形式获得。分布的方差大于、等于或小于均值,取决于 X2 是正数、零还是负数。有关公式和更多详细信息,请访问标题中的链接。
- 广义线性模型#
- GLM#
在广义线性模型(GLM)中,我们假设响应变量 \(y_i\) 服从指数族分布,其均值为 \(\mu_i\),该均值被假设为 \(x_i^T\beta\) 的某种(通常是非线性)函数。它们被认为是线性的,因为协变量仅通过线性组合 \(x_i^T\beta\) 影响 \(Y_i\) 的分布。广义线性模型的一些例子包括:线性回归、方差分析、逻辑回归和泊松回归。
备注
不要将这些与一般线性模型混淆
- 最大后验估计#
- MAP#
它是对未知量的点估计,等于后验分布的众数。
如果先验分布是平坦分布,MAP方法在数值上等价于最大似然估计(MLE)。当先验分布不是平坦时,MAP估计可以看作是MLE的正则化版本。
关于 MLE 和 MAP 的简明比较,可以参考 Ian Goodfellow 的《深度学习》第5.6.1章节,或者 Kevin Murphy 的《机器学习:一种概率视角》(Machine Learning: a Probabilistic Perspective)。
- 未命名分布#
PyMC 分布可以直接初始化(例如
pm.Normal
)或使用.dist
类方法(例如pm.Normal.dist
)。使用第一种方法初始化的分布被注册为模型参数,因此需要给定名称并在模型上下文中初始化。”unnamed_distributions” 是使用第二种方法初始化的分布。这些是独立的分布,它们不是任何模型中的参数,可以用于从分布本身抽取样本,或作为混合或截断等其他分布的参数。unnamed_distributions
可以在模型上下文之外使用。例如:import pymc as pm unnamed_dist = pm.Normal.dist(mu=1, sigma=2) pm.draw(unnamed_dist, draws=10)
array([ 2.09120308, 0.1390844 , 0.97792669, -0.26848386, 0.18711246, 1.77291234, 2.75488951, 1.0597762 , -0.68761105, 0.83478852])
在模型上下文之外尝试初始化命名分布会引发
TypeError
:import pymc as pm pm.Normal("variable")
--------------------------------------------------------------------------- IndexError Traceback (most recent call last) File ~/baidu/code/fin_tool/github/pymc/pymc/model/core.py:155, in ContextMeta.get_context(cls, error_if_none, allow_block_model_access) 154 try: --> 155 candidate: Optional[T] = cls.get_contexts()[-1] 156 except IndexError: 157 # Calling code expects to get a TypeError if the entity 158 # is unfound, and there's too much to fix. IndexError: list index out of range During handling of the above exception, another exception occurred: TypeError Traceback (most recent call last) File ~/baidu/code/fin_tool/github/pymc/pymc/distributions/distribution.py:282, in Distribution.__new__(cls, name, rng, dims, initval, observed, total_size, transform, *args, **kwargs) 280 from pymc.model import Model --> 282 model = Model.get_context() 283 except TypeError: File ~/baidu/code/fin_tool/github/pymc/pymc/model/core.py:160, in ContextMeta.get_context(cls, error_if_none, allow_block_model_access) 159 if error_if_none: --> 160 raise TypeError(f"No {cls} on context stack") 161 return None TypeError: No <class 'pymc.model.core.Model'> on context stack During handling of the above exception, another exception occurred: TypeError Traceback (most recent call last) Cell In[3], line 3 1 import pymc as pm ----> 3 pm.Normal("variable") File ~/baidu/code/fin_tool/github/pymc/pymc/distributions/distribution.py:284, in Distribution.__new__(cls, name, rng, dims, initval, observed, total_size, transform, *args, **kwargs) 282 model = Model.get_context() 283 except TypeError: --> 284 raise TypeError( 285 "No model on context stack, which is needed to " 286 "instantiate distributions. Add variable inside " 287 "a 'with model:' block, or use the '.dist' syntax " 288 "for a standalone distribution." 289 ) 291 if "testval" in kwargs: 292 initval = kwargs.pop("testval") TypeError: No model on context stack, which is needed to instantiate distributions. Add variable inside a 'with model:' block, or use the '.dist' syntax for a standalone distribution.
- 概率质量函数#
- PMF#
一个函数,给出离散随机变量等于某个特定值的概率。
- 欠分散#
在统计学中,欠分散是指数据集中的 变异性 低于基于给定统计模型所预期的水平。
- 离散度#
在统计学中,离散度(也称为变异性、散布或扩展)是指分布被拉伸或压缩的程度。
- 调度#
根据输入变量的类型(通常只是第一个变量)选择使用哪个函数或方法实现。有关一些示例,请参阅 Python 文档中关于
singledispatch
装饰器的内容。- 贝叶斯定理#
描述基于与事件相关的先验知识的事件概率。例如,如果已知健康问题的风险随年龄增长而增加,贝叶斯定理允许更准确地评估已知年龄的个体的风险(通过根据其年龄进行条件化),而不是简单地假设该个体与整个人口一样典型。公式:
\[::\]其中 \(A\) 和 \(B\) 是事件,且 \(P(B) eq 0\)
- 贝叶斯工作流程#
贝叶斯工作流程涉及模型构建所需的所有步骤。这包括 贝叶斯推断,但也包括其他任务,如 i) 推断质量的诊断,ii) 模型批评,包括对模型假设和模型预测的评估,iii) 模型的比较,不仅是为了模型选择或模型平均,更重要的是为了更好地理解这些模型,以及 iv) 为特定受众准备结果。这些非推断性任务需要数值和视觉总结来帮助从业者分析他们的模型。它们有时被统称为 贝叶斯模型的探索性分析。
关于简要概述,请参阅 van de Schoot, R., Depaoli, S., King, R. 等人在《Nat Rev Methods - Primers》1, 1 (2021) 中的贝叶斯统计与建模。
如需深入了解,请参阅 Andrew Gelman、Aki Vehtari、Daniel Simpson、Charles C. Margossian、Bob Carpenter、Yuling Yao、Lauren Kennedy、Jonah Gabry、Paul-Christian Bürkner 和 Martin Modrák 合著的《贝叶斯工作流程》。
关于基于练习的材料,请参阅 Allen B. Downey 所著的《Think Bayes 2e: Bayesian Statistics Made Simple》
对于即将出版的使用PyMC、Tensorflow Probability和ArviZ库的教科书,请参见Osvaldo A. Martin、Ravin Kumar和Junpeng Lao所著的《贝叶斯建模与计算》。
- 贝叶斯推断#
一旦我们定义了统计模型,贝叶斯推断会处理数据和模型以生成一个 后验 分布。这是一个模型中所有参数的联合分布。该分布用于表示合理性,并且是模型和数据的逻辑结果。
- 贝叶斯模型#
贝叶斯模型是由变量及其分布定义组成的复合体。贝叶斯模型有两个定义特征:i) 未知量使用概率分布描述,ii) 使用贝叶斯定理根据数据更新参数值。
- 过度离散#
在统计学中,过度离散是指数据集中的 变异性 大于根据给定统计模型所预期的变异性。
- 马尔可夫链#
马尔可夫链或马尔可夫过程是一种随机模型,描述了一系列可能事件的序列,其中每个事件的概率仅取决于前一个事件达到的状态。
- 马尔可夫链蒙特卡洛#
- MCMC#
马尔可夫链蒙特卡洛(MCMC)方法包含一类用于从概率分布中采样的算法。通过构建一个具有所需分布作为其平衡分布的 马尔可夫链,可以通过记录链中的状态来获得所需分布的样本。存在各种用于构建链的算法,包括 Metropolis–Hastings 算法。