跳转到主要内容

从exoplanet项目中提取的PyMC3附加组件

项目描述

PyMC3附加组件

此库包括各种用于与PyMC3一起使用的实验性或特殊用途的附加组件,这些组件已从exoplanet项目提取。最广泛使用的组件可能是为PyMC3 NUTS采样器定制的调整函数,如以下所述,但它还包括一些用于非线性优化一些自定义分布的辅助函数。

以下为使用说明,以及GitHub上notebooks分支上的自动生成的教程笔记本。

安装

您需要一个Python安装(已在版本3.7和3.8上测试),通常最好使用conda安装PyMC3,以便它可以处理编译器设置的所有细节。此步骤是可选的,但我会为使用PyMC3的项目创建一个干净的conda环境

# Optional
conda create -n name-of-my-project python=3.8 pymc3
conda activate name-of-my-project

安装此包的最简单方法是使用pip

python -m pip install -U pymc3-ext

这将更新依赖项,如PyMC3,这可能是您想要的,因为此包只在两个包的最新版本上进行了测试。

NUTS调整

pymc3-ext库提供的主要功能是PyMC3中pm.sample函数的即插即用替代品

import pymc3_ext as pmx

with model:
    trace = pmx.sample()

这调整了默认设置(如密集质量矩阵自适应和更高的目标接受分数等),使其更符合天体物理学用户的需求,但也提供了一些可能提高采样性能的其他功能。

以下描述了主要功能,但更多细节可以在采样教程笔记本中找到。

调整计划

与PyMC3中实现的标准化pmx.sample相比,主要区别在于调整计划。在PyMC3中,默认的调整计划非常简单:(a)每一步更新步长参数, (b)每N步更新质量矩阵。实际上,程序要复杂一些,但这正是关键。相反,pmx.sample使用一个“快速”和“慢速”更新计划,其自适应窗口加倍,几乎与Stan项目使用的方案相同。我们发现,这可以显著优于默认算法,并且很少导致性能下降。

参数组

由于此pmx.sample函数默认估算密集质量矩阵,对于具有大量参数的问题,采样器的内存和计算需求(以及数值误差)可能会显著增加。此库包括支持对已知具有协方差参数进行分组,以便质量矩阵是分块对角而不是密集的。例如,在下面的代码片段中,参数x已知是相关的,而参数y只需要对角质量矩阵。

import pymc3 as pm
import pymc3_ext as pmx

with pm.Model():
    # `L` is the Cholesky factor of a covariance matrix with off-diagonal elements
    x = pm.MvNormal("x", mu=np.zeros(L.shape[0]), chol=L, shape=L.shape[0])
    y = pm.Normal("y", shape=5)

    trace = pmx.sample(
        parameter_groups=[
            [x],
            pmx.sampling.ParameterGroup([y], "diag"),
        ],
    )

可变目标接受分数(实验性)

pmx.sample函数还包括对实验性功能的支持,其中目标接受分数在整个调整阶段进行调整。当早期预热窗口运行缓慢时,这很有用,因为高目标接受分数将需要非常小的步长,这不适合搜索典型集。可以通过提供initial_accept参数(通常设置为类似0.5)来使用此功能,并将其传递给pmx.sample。这将是在开始时的目标接受分数,它将在调整阶段增加到target_accept(默认为0.9)。

优化

当PyMC3向pm.find_MAP函数添加警告时,我们在exoplanet中实现了一个自定义非线性优化框架,因为它通常在初始化许多天体物理学问题(以及可能的其他地方)的采样器时非常有用。虽然pm.find_MAP不再抱怨,但包括pymc3_ext.optimize函数是为了向后兼容,尽管它应该具有与pm.find_MAP类似的行为。要使用此函数,您将执行以下操作:

import pymc3_ext as pmx

with model:
    soln = pmx.optimize(vars=[var1, var2])
    soln = pmx.optimize(start=soln, vars=[var3])

分布

此库中的大多数自定义分布都是为了使处理周期性参数(如角度)更容易。所有这些重新参数化都可以手动实现,但将它们放在更紧凑的形式中很有用。以下是包括的分布及其简短描述的列表:

  • pmx.UnitVector:一个向量,其平方和固定为1。对于多维形状,归一化是在最后一个维度上执行的。
  • pmx.UnitDisk:二维参数被限制在单位圆盘内。当角度和幅度必须在零到一的范围(例如,轨道的偏心率向量)内时,这将很有用。此分布被限制,使得零轴上的平方和始终小于1。请注意,此分布的零轴形状必须是二维。
  • pmx.Angle:一个被限制在 -π 到 π 范围内的角度。实际的采样是在二维向量空间 (sin(theta), cos(theta)) 中进行的,这样采样器就不会在 π 处看到不连续性。作为一个技术细节,这个分布的性能可能会受到 regularization 参数的影响,该参数有助于处理当此参数约束良好/差时引入的病理几何。默认值(10.0)被选为一个合理的默认选择,但您可能通过调整此值获得更好的性能。
  • pmx.Periodic:是 pmx.Angle 的一个扩展,它支持允许范围的任意上界和下界。
  • pmx.UnitUniform:此分布等同于 pm.Uniform(lower=0, upper=1),但在某些情况下可能更数值稳定。

许可证

版权所有 2020 丹·福雷曼-麦凯和贡献者。

pymc3-ext 是免费软件,在 MIT 许可下提供。有关详细信息,请参阅 LICENSE 文件。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定要选择哪个,请了解更多关于 安装软件包 的信息。

源分发

pymc3_ext-0.1.1.tar.gz (35.0 kB 查看哈希)

上传时间

构建分发

pymc3_ext-0.1.1-py2.py3-none-any.whl (22.6 kB 查看哈希)

上传时间 Python 2 Python 3

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面