用于嵌套采样的python工具包。

gleipnir-ns的Python项目详细描述


格列普尼

Python版本徽章licenseversion发布anaconda clouddoiCodacy徽章

gleipnir是一个python工具包,它提供了一个易于使用的接口,用于使用嵌套采样进行贝叶斯参数推断和模型选择。它有嵌套采样算法的内置实现,但也提供了嵌套采样实现的通用接口multinest、polychord、dypolychord、dnest4和nestle。 尽管gleipnir为运行嵌套采样模拟提供了一个通用框架,但它是在考虑生物模型的情况下创建的。因此,它提供了使用pysb格式的生物模型的其他工具(参见pysb实用程序部分)。同样地,gleipnir的api被设计为让pydream和simplepso的用户熟悉,simplepso主要用于生物模型校准。

什么是嵌套采样?

嵌套采样是一种数值积分方法,用于估计高维模型的边缘似然,或者用嵌套采样的说法,即"证据"。 作为证据计算的副作用,模型参数的后验概率分布的估计也可以生成。

特别是,嵌套采样 用于处理高维模型的证据评估,其中似然在先验概率质量中呈指数局部化。在嵌套抽样方法中,证据首先从(可能的)多维积分转换为一维积分,然后由似然函数映射到单位先验概率质量(x)的元素。原则上,这是通过使用t降档 一种根据先验分布提取样本点,并对单位先验概率进行细分的方法 从x=1到x=0的等分元素 通过似然排序例程映射到似然函数L(x)。

嵌套采样方法最初由John Skilling开发;请参阅以下参考资料:

  1. 斯基林,约翰。"嵌套抽样〉,AIP会议论文集。体积<LI><李> 1号。AIP,2004年。
  2. 斯基林,约翰。"用于一般贝叶斯计算的嵌套采样。" 贝叶斯分析1.4(2006):833-859。
  3. 斯基林,约翰。"嵌套抽样的收敛性〉,aip会议 程序。第1193卷。1号。AIP,2009年。

安装

<表><广告>!警告< /广告><正文>Gleipnir仍在大力开发中,可能会迅速改变。

gleipnir安装为gleipnir包。它与Python3.6兼容。

Conda安装

虽然不是绝对需要,但我们建议使用蟒蛇分布版和包管理器。

gleipnir可以使用conda从终端安装:

conda intall -c blakeaw gleipnir

注意gleipnir具有以下核心依赖项,这些依赖项也将被安装:

或者,为了方便起见,可以下载/创建一个gleipnir环境,其中包含gleipnir及其核心依赖项,以及几个可选/推荐的包;可选/推荐的包包括pysbhypbuildermatplotlibseabornjupyter。 从终端:

conda env create blakeaw/gleipnir

然后使用:

conda activate gleipnir

另外,还有一个linux-64的gleipnir环境,可以下载/创建它的gleipnir,它的核心依赖项,以及大多数推荐的附加软件包;请注意,包的版本固定在此环境文件中的确切版本号。 从终端:

conda env create blakeaw/gleipnir-all-linux64

然后使用:

conda activate gleipnir

PIP安装

您可以使用来自github repo的pip安装gleipnir包:

pip install -e git+https://github.com/LoLab-VU/Gleipnir@v0.18.0#egg=gleipnir

但是,这不会自动安装核心依赖项。您必须单独执行此操作:

pip install numpy scipy pandas

推荐的附加软件

gleipnir的基本操作不需要以下软件,但在安装时提供了额外的功能和特性。

pysb

运行pysb模型需要pysb,如果要使用gleipnir.pysb_实用程序模块,则需要pysb:

conda install -c alubbock pysb

hypbuilder

如果您想使用gleipnir.pysb_实用程序中的hypSelector类,那么 需要有HypBuilder

conda install -c blakeaw hypbuilder
朱庇特

如果您想运行gleipnir附带的jupyter ipython笔记本,则需要安装jupyter

conda intall -c blakeaw gleipnir
0

绘图包:

我们建议安装matplotlib和seaborn来生成绘图。请注意,一些gleipnir示例将使用这些软件包(如果安装它们来生成示例图)。其中一个Jupyter笔记本还需要matplotlib。

conda intall -c blakeaw gleipnir
1

多嵌套

如果要使用gleipnir的multinestedinterface类对象multinestedsampling(来自gleipnir.multinest模块)运行嵌套采样模拟,然后您需要安装pymultinestmultinest。有关从源获取pymultinest和multinest的生成和安装说明,请访问: http://johannesbuchner.github.io/pymultinest/install.html

pypi上提供pymultinest:

conda intall -c blakeaw gleipnir
2

注意,除了multinest之外,pymultinest还需要numpyscipymatplotlib才能运行。它还可以选择需要mpi4py来运行带有mpi并行化的multinest。

您可以从blakeaw conda频道获得linux-64 conda的multinest版本

conda intall -c blakeaw gleipnir
3

注意,这个conda构建的multinest需要来自anacondaconda forge通道的包,因此需要将它们添加到conda config(.condarc)文件的通道列表中。您还可以从Blakeaw Conda频道安装与此多嵌套版本兼容的mpi4py版本

conda intall -c blakeaw gleipnir
4

此外,有关在Mac OS上构建和安装的第三方说明,请参见: http://astrobeter.com/wiki/multinest+installation+notes

此外,如果您在Mac OS上遇到库路径问题,则此pymultinest github问题可能会有所帮助: https://github.com/johannesbuchner/pymultinest/issues/89

多头

如果要使用polychord运行嵌套采样模拟,请通过 polychordnestedsampling类来自gleipnir.polychord,则需要安装pypolychord(对于polychordlite版本>;=1.16)。自述文件中提供了构建和安装说明: https://github.com/polychord/polychordlite

但是,根据polychordlite github issues 11有一个版本的pypolychord在pypi上应该适用于linux-64:

conda intall -c blakeaw gleipnir
5

但请注意,pypi上的pypolychord的当前版本(截至2019年1月7日)不是最新版本,gleipnir提供的一些额外功能将无法使用它。

Linux-64上源代码生成的特别说明:

  • 安装到.local/lib python站点包中。
  • 需要gfortran(f77编译器)和lipopenmpi dev(mpi的开发库)来构建代码。

双光子

如果要运行嵌套采样模拟,请使用 dypolychord使用gleipnir的接口对象dypolychordnestedsampling(来自gleipnir.dypolychord模块),则需要安装dypolychord(在pypi上可用):

conda intall -c blakeaw gleipnir
6

注意,dypolychord需要运行polychord,因此通过gleipnir使用它需要pypolychord包;请参阅上一节。还要注意,除了polychord之外,dypolychord还需要numpyscipynestcheck才能运行。它还可以选择要求mpi4py与mpi并行化一起运行。 有关更多信息,请查看dypolychord文档操作

dnest4

如果要通过gleipnir.dnest4模块中的dnest4 nested sampling类使用dnest4运行嵌套采样模拟,则需要获取dnest4及其python绑定。有关从源代码生成和安装的说明,请参阅自述文件: https://github.com/eggplantbren/dnest4

另外,可以从 blakeaw conda频道

conda intall -c blakeaw gleipnir
7

从源代码处构建和安装的特别注意事项:

  • 要求C++编译器使用C++ 11标准库。
  • 需要cython和numba才能编译和安装python绑定

雀巢

如果要运行嵌套采样模拟,请使用 雀巢通过gleipnir的接口对象nestlenestedsampling(来自gleipnir.nestle模块),然后需要安装雀巢(可从pypi获得):

conda intall -c blakeaw gleipnir
8

请注意,雀巢需要numpy才能运行(gleipnir也需要),它还可以选择需要scipy

有关更多信息,请查看雀巢文档。


许可证

此项目是在麻省理工学院许可证下授权的-有关详细信息,请参见许可证文件


文档和用法

查看Jupyter笔记本(更多内容正在准备中):

  1. 介绍使用gleipnir进行嵌套采样
  2. 嵌套采样类
  3. hypselector示例
  4. 模型选择器示例

另外,请查看示例以查看演示如何使用gleipnir设置嵌套采样运行的示例脚本。


联系人

若要报告问题或错误,请打开 github问题。另外,任何 gleipnir的评论、建议或特性请求也可以作为 github问题


PYSB实用程序

嵌套示例

nestedsample是一个实用程序,帮助为pysb模型生成嵌套采样运行脚本或嵌套采样对象。

命令行使用

nestedsample_它可以用作命令行实用程序,为pysb模型生成模板嵌套采样运行脚本。NestedSample读取模型文件,导入并提取所有动力学参数,然后写出该模型的运行脚本。nestedsample_它目前通过gleipnir为经典嵌套采样编写一个运行脚本,因此您需要修改它以使用其他嵌套采样器之一(multinest、polychord或dnest4)。您需要编辑运行脚本来加载任何数据并修改loglikelihood函数,但是nestedsample应该给您一个很好的起点。

从命令行运行nestedsample,格式如下:

conda intall -c blakeaw gleipnir
9

其中output_path是要生成脚本的目录/文件夹位置 保存。

命令行版本的nestedsample也支持一组有限的nestedsample it指令,这些指令可以添加到模型文件中。当前指令是:

  • #嵌套样本优先[参数名称,参数索引][规范,统一]
    • 指定分配给PA之前的类型尺码。参数可以由其名称或其索引(在model.parameters中)指定。可以指定的优先级是norm或uniform;请注意,uniform是所有参数的默认值。
  • #nestedsample_it no sample[参数名称,参数索引]
    • 指定固定参数(即不包括在采样中)。参数可以由其名称或索引(在model.parameters中)指定。

通过嵌套的sampleit类进行编程使用

NestedSample_it实用程序可以通过NestedSampleIt以编程方式使用 班级。可从Pysb_实用程序模块导入:

conda env create blakeaw/gleipnir
0

NestedSampleIt类可以构建NestedSampling对象的实例。
下面是一个假的最小示例:

conda env create blakeaw/gleipnir
1

NestedSampleIt构造NestedSampling对象来采样模型的所有动力学速率参数。它假设优先级是一致的,大小为4个数量级,并以模型中定义的值为中心。

此外,NestedSampleIt通常有三个具有不同估计量的预定义对数似然函数。可以使用关键字参数log_likelihood_type:

conda env create blakeaw/gleipnir
2

选项是

  • 'logpdf'=>;使用 正态分布估计量
  • 'mse'=>;使用 负均方误差估计量
  • 'sse'=>;使用 平方误差的负和估计。 默认值为"logpdf"。 这些函数中的每一个都使用在可观测数据字典中定义的每个可观测数据的模型模拟的时间过程输出来计算对数似然估计。 如果您想对嵌套的样本使用不同的或更复杂的似然函数,则需要对其进行子类化并重写现有的一个loglikelihood函数。

嵌套

nestedsample_it模块有一个内置的helper类nessit,可以与nestedsampleit类一起使用。nestin可以在pysb模型定义级别使用,以记录要包含在其中的参数 嵌套采样运行。它可以从pysb_实用程序模块导入:

conda env create blakeaw/gleipnir
3

它在实例化时传递给NestedSampleIt类,后者使用它 为似然性建立采样参数列表和参数掩码 功能。 请参阅以下示例文件:

请注意,如果在不设置优先级的情况下标记要采样的参数,Nestint将在默认情况下为该参数指定一个统一的优先级,该优先级以参数值为中心,宽度为4个数量级。

来自pysb.builder的builder类

builder中的builder类也可以与nestedsampleit类一起使用。builder类本身是一个包装类,可用于构造pysb模型和设置参数prior,并记录它们以进行采样。虽然 此功能最初用于bayessb包,nestedsampleit类支持它作为采样参数的记录器。 生成器的实例在实例化时传递给NestedSampleIt类,该类使用它来构建似然函数的采样参数列表和参数掩码。 请参阅以下示例文件:

请注意,在使用builder.parameter函数添加模型时,必须为要采样的每个参数显式设置previor。如果没有 给定prior时,该参数不会作为采样参数包含在嵌套采样运行中。

半选择器

hypSelector是使用hypBuilder和基于嵌套采样的模型选择进行假设选择的工具。可以使用hypbuilder csv语法定义包含不同假设(例如,可选反应)的模型。然后,hypSelector允许用户通过执行嵌套采样来计算其证据,从而轻松比较hypBuilder生成的所有假设模型变体,从而进行模型选择;hypSelector还提供了从证据估计中估计bayes因子的功能,以及作为从嵌套采样输出计算出的akaike、bayesian和偏差信息准则的估计量。请参见分组反应示例或hypselector示例jupyter笔记本查看hypselector的使用示例。

型号选择器

与hypselector类似,modelselector是一个使用基于嵌套采样的模型选择的pysb模型选择工具。ModelSelector允许用户轻松比较用PYSB编写的模型变体,并通过执行嵌套采样来计算它们的证据,从而进行模型选择,从而查看哪一个可以最好地解释数据集;modelselector还提供了从证据估计中估计bayes因子的功能,以及从嵌套采样输出计算的akaike、bayesian和偏差信息准则的估计量。请参见模型选择器示例jupyter notebooks的用法。


引用

如果你在研究中使用gleipnir软件,请引用它。您可以将gleipnir引文以您喜欢的格式从其zenodo doi条目中导出。

另外,请为与gleipnir一起使用/通过gleipnir使用的软件引用以下参考资料:

来自scipy生态系统的包

其中包括numpy、scipy、pandas和matplotlib,可以从以下位置获取参考: https://www.scipy.org/inventing.html

pysb

  1. Lopez,C.F.,Muhlich,J.L.,Bachman,J.A.&Sorger,P.K.。使用PysB在Python中编程生物模型。分子系统生物学9,(2013)。doi:10.1038/msb.2013.1

多嵌套

  1. 费罗斯、法汉和M.P.霍布森。"多模态嵌套采样 马尔可夫链蒙特卡罗方法的有效和鲁棒性 天文数据分析方法 皇家天文学会384.2(2008):449-463。
  2. 弗罗兹、F、M.P.霍布森和M.布里奇斯。"多重嵌套:有效的 宇宙学和粒子的稳健贝叶斯推理工具 物理学.皇家天文学会月刊398.4 (2009年):1601-1614。
  3. Feroz,F.等人。"重要嵌套抽样与多重嵌套 算法。"arxiv预印本arxiv:1306.2144(2013)。

多嵌套:

  1. Buchner,J.等人。"cdfs中agn遮蔽区的x射线光谱模拟:贝叶斯模型选择和目录〉,《天文与天体物理学》564(2014):a125。

多头
  1. 汉德利、W.J、M.P.霍布森和A.N.拉森比。"polychord:嵌套采样宇宙学。"皇家天文学会月刊:450.1(2015年):l61-l65。
  2. 汉德利、W.J、M.P.霍布森和A.N.拉森比。"多弦: 下一代嵌套抽样。《皇家月刊》 天文学会453.4(2015):4384-4398。

dnest4

  1. Brewer,B.J.,Pértay,L.B.,&Cényi,G.(2011年)。扩散嵌套 采样。统计与计算,21(4),649-656
  2. Brewer,B.和Foreman Mackey,D.(2018年)。DNEST4:在C++和Python中的扩散嵌套采样。统计软件杂志,86(7),1-33。doi:10.18637/jss.v086.i07

雀巢

引用github repo:https://github.com/kbarbary/nestle" rel="nofollow">https://github.com/kbarbary/nestle

西伯恩

可从seaborn zeondo doi条目导出引用

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
添加组件后,java JTable为空   java将json发送到php并插入mysql,但返回null   java Spring引导JNDI CommonJ资源   从不同PC创建和合并后的Java servlet问题   java如何在使用findelements时从xpath获取文本   java使用spring boot使用gmail smtp发送电子邮件   java在不使用pojo、bean或getter和setter的情况下获取Json标题的Json数组   Java中的OpenFile对话框将null作为响应   JavaBuilder模式。扩展接口   java中无需替换的数据结构选取   java如何评价Encog中的预测神经网络   java如何在安卓中使用实际的HttpURLConnection进行单元测试?   java使用XML配置禁用WebSocket中的CSRF保护   java如何通过hibernate从多表查询中获取数据?   mysql如何在java中获取更新的行Id   java AEM/CQ组件单一组件/有限组件   java FFmpeg Javacv延迟问题   显示整数数组的java不起作用