从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 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a66a56a6372125c89f67b6c683614dedc2b0b6310344fc8893b81d876c0acf70 |
|
MD5 | 4787dffc1e776da9396c46f9087afa45 |
|
BLAKE2b-256 | a30555af32d09f06a165aff51a91e6d36b825f1eef4a4f5a55dfcfd9a951a781 |
pymc3_ext-0.1.1-py2.py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 621833c8db1fe67a20f836170c4f14e83d11cc4b66e72fb7334e509ea019e775 |
|
MD5 | c1ed47d2654266eecd150df5258d3174 |
|
BLAKE2b-256 | 8c192f4ab3b5fec47e6542902a6224343fb1790727c40d507bcbef2d56410a56 |