PRISM:快速分析模型的可替代MCMC方法
项目描述
使用PRISM进行模型分散;MCMC的快速分析替代方法
PRISM是一个纯Python 3包,提供了一种替代MCMC分析科学模型的方法。
简介
技术的快速发展使得计算资源和观测/实验仪器每年都在变得更好、更快、更精确。这导致可用科学数据的数量不断增加,并提出更多研究问题。因此,试图回答这些问题的科学模型越来越多,并且随着这些模型融入更复杂的科学和更接近现实,这些模型正在将可用资源推向极限。
然而,随着可用的模型数量增加,它们也倾向于变得更加独特,这使得追踪它们的个别品质变得困难。要识别这些品质,需要对每个模型进行全面分析。通常,为了执行这项任务,会采用马尔可夫链蒙特卡洛(MCMC)方法和贝叶斯统计。然而,由于这些方法旨在用于对后验概率分布函数进行近似,因此必须有更有效的方法来分析它们。
PRISM试图通过使用贝叶斯线性方法、仿真技术和历史匹配来构建任何给定模型的近似(“仿真器”)来解决这个问题。使用这些技术可以看作是贝叶斯统计的特殊情况,其中有限的模型评估与高级回归技术、协方差和概率计算相结合。PRISM旨在通过限制合理区域和有效地探索参数空间来轻松地促进和增强现有的MCMC方法。然而,PRISM还可以作为MCMC的独立替代方案用于模型分析,从而深入了解复杂科学模型的行为。使用PRISM,评估模型所需的时间最小化,为开发者提供了传统方法所需时间的一小部分的高级模型分析。
为什么使用PRISM?
纯Python 3编写,具有多功能性;
将结果存储在HDF5文件中,允许用户轻松访问;
可以在串行或MPI中执行,在任意数量的进程中执行;
与Windows、Mac OS和基于Unix的机器兼容;
接受任何类型的模型和比较数据;
作为即插即用工具构建:所有主要类也可以用作基类;
通过编写单个自定义ModelLink子类即可轻松链接到任何模型;
仅使用数千次模型评估即可将相关参数空间减少100,000倍以上;
可以单独用于分析模型,或与MCMC结合进行高效的模型参数估计。
何时(或不)使用PRISM?
看起来使用PRISM进行几乎所有的事情都很吸引人,但请记住,仿真有其局限性。以下是一般但非详尽的场景列表,其中PRISM可以变得非常有价值
在几乎所有希望使用MCMC贝叶斯分析进行参数估计的情况中(通过使用混合采样)。这对于约束较差的模型(观测约束数量较少)尤其正确;
当希望可视化不同模型参数之间的相关行为时;
在不需要进行全面参数估计的情况下快速探索模型的参数空间。当尝试不同的观测数据集以研究它们的约束力时,这可能非常有用;
在非常接近最优化参数集的地方获得模型的合理准确近似。
然而,也有情况更适合使用不同的技术,以下是非详尽的通用列表
为了获得整个参数空间中模型的合理准确近似。由于仿真的构建方式,这可能需要数百万次模型评估、大量的时间和内存;
当处理具有大量参数/自由度的模型(>50)时。然而,这仍然严重依赖于所使用的模型类型;
当有大量观测约束可用,且希望使用所有这些约束(除非你还能访问大型超级计算机)时。在这种情况下,使用完整的贝叶斯方法会更好;
希望获得模型的后验概率分布函数(PDF);
判断是否应该使用PRISM的一个非常通用且简单的方法是问自己:“在给定的时间和资源下,我会为这个问题使用完整的贝叶斯分析吗?”。如果答案是“是”,那么PRISM可能是一个不错的选择,特别是因为它需要的资源与贝叶斯分析相近(参数空间的定义;提供比较数据;以及评估模型的方式)。
入门
安装
PRISM可以通过克隆存储库并手动安装来轻松安装
$ git clone https://github.com/1313e/PRISM $ cd PRISM $ pip install .
或者通过使用PyPI直接安装:
$ pip install prism
PRISM现在可以作为包导入,使用import prism
。要在MPI中使用PRISM,需要mpi4py >= 3.0.0
(不会自动安装)。
PRISM包包含两个ModelLink子类。这些ModelLink子类可用于实验PRISM以了解其工作原理。在线文档和教程中有多个示例,解释了该包的不同功能。
运行测试
如果想要在PRISM上运行pytests,则需要所有开发需求。运行测试的最简单方法是克隆存储库,安装所有需求,然后在上面运行pytest
$ git clone https://github.com/1313e/PRISM $ cd PRISM $ pip install -r requirements_dev.txt $ pytest
如果PRISM和所有开发需求已经安装,可以在安装目录中运行pytest
来运行测试
$ cd <path_to_installation_directory>/prism $ pytest
当使用Anaconda时,安装目录路径可能是<HOME>/anaconda3/envs/<环境名称>/lib/pythonX.X/site-packages
的形式。
示例用法
# Imports
from prism import Pipeline
from prism.modellink import GaussianLink
# Define model data and create ModelLink object
model_data = {3: [3.0, 0.1], 5: [5.0, 0.1], 7: [3.0, 0.1]}
modellink_obj = GaussianLink(model_data=model_data)
# Create Pipeline object
pipe = Pipeline(modellink_obj)
# Construct first iteration of the emulator
pipe.construct()
# Create projections
pipe.project()
社区指南
PRISM是一个开源的免费软件包(它始终将是),在BSD-3许可下提供。
鼓励用户通过打开GitHub问题为包做出贡献或请求新功能。如果你想为包做出贡献,但不知道该做什么,那么代码中有相当多的待办事项可能给你一些启发。同样,如果你发现PRISM存在问题或问题,请不要犹豫,在GitHub问题中提出或在其Gitter上发布。
最后,如果你将PRISM作为科学出版物工作流程的一部分使用,请考虑包括类似“本工作中的一些结果是通过使用PRISM Python包得到的”之类的致谢,并引用PRISM管道论文。
@ARTICLE{2019ApJS..242...22V, author = {{van der Velden}, E. and {Duffy}, A.~R. and {Croton}, D. and {Mutch}, S.~J. and {Sinha}, M.}, title = "{Model dispersion with PRISM; an alternative to MCMC for rapid analysis of models}", journal = {\apjs}, keywords = {Astrophysics - Instrumentation and Methods for Astrophysics, Physics - Computational Physics}, year = "2019", month = "Jun", volume = {242}, number = {2}, eid = {22}, pages = {22}, doi = {10.3847/1538-4365/ab1f7d}, archivePrefix = {arXiv}, eprint = {1901.08725}, primaryClass = {astro-ph.IM}, adsurl = {http://adsabs.harvard.edu/abs/2019ApJS..242...22V}, adsnote = {Provided by the SAO/NASA Astrophysics Data System} }
致谢
特别感谢Darren Croton、Alan Duffy、Michael Goldstein、Simon Mutch、Manodeep Sinha和Ian Vernon提供了许多宝贵的建议和建设性反馈。对James Josephides制作PRISM标志表示衷心的感谢。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
构建分发
prism-1.3.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 800357313bae8fdc89e561227e30857e8af85b67dc33b3612befe929bf61c698 |
|
MD5 | 93136b7df9c010129c7d7d05d91201a6 |
|
BLAKE2b-256 | 8df3d917d1ff881c82cfca48261f2c09d3f621d95a3cae64aff64b184bf2cc17 |
prism-1.3.2-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 862179dbdf5e9aa676372f2225d906a5f86a9336b2e167bb6e1fad0cef25ee3f |
|
MD5 | 9f449f63c3b09ee923d9a01c234897f1 |
|
BLAKE2b-256 | b5e59a2bcc4e4d76e51b5bada3db7a74b6ef3f42f9836ca6ca0e2842725eb7ca |