后验分布的高斯过程逼近

approxposterior的Python项目详细描述


**approxposterior***


概述
==


给定一组观测值,通常希望根据数据推断模型参数。为此,
可以使用贝叶斯推理来推导一个后验概率分布
,该后验概率分布是以观测数据为条件的,具有不确定性的模型参数。例如,在天文学中,利用mandel&agol(2002)
凌日模型,根据恒星通量随时间变化的观测值拟合凌日行星的半径是很常见的。通常,可以使用马尔可夫链蒙特卡罗(mcmc)技术导出模型参数的后验分布,其中每次mcmc迭代,计算给定模型参数的数据的可能性。为了计算可能性,
评估模型,以作出预测,并与观察结果进行比较,例如使用chi^2度量。在实践中,mcmc分析可能需要10000到1000000个可能性评估,这取决于模型的复杂性和问题的维数。当使用一个缓慢的模型,例如一个需要几分钟才能运行的模型时,运行一个mcmc分析很快就会变得非常昂贵,而且常常是一个棘手的问题。在这种情况下,通过最小化模型评估次数,在合理的时间内计算贝叶斯后验分布需要近似技术。

approxposteror是[贝叶斯后验主动学习]的python实现。估算](https://www.cs.cmu.edu/~kkandasa/pubs/kandasamyijcai15activepostest.pdf)
由kandasamy等人编写。(2015)和Wang&Li(2017)的[具有昂贵似然函数的贝叶斯推理的自适应高斯过程近似](https://arxiv.org/abs/1703.09930)。
这些算法允许用户计算与计算上昂贵的模型。这些算法通过训练高斯过程(gp)在对数概率空间中建模协方差,有效地成为似然估计的代理模型。为了提高gp自身的预测性能,两种算法都利用gp预测中固有的不确定性来识别参数空间中gp不确定的高似然区域。然后,算法在这些点上评估模型以计算似然性,并重新训练gp以最大化gp的预测能力,同时最小化模型评估的次数。查阅Kandasamy等人的[贝叶斯主动学习用于后验估计](https://www.cs.cmu.edu/~kkandasa/pubs/Kandasamyijcai15activepostest.pdf)。(2015)和Wang&Li(2017)的《具有昂贵似然函数的贝叶斯推断的自适应高斯过程近似》(https://arxiv.org/abs/1703.09930),以深入描述各自的算法。

我们发现Approxposterior可以得到完全近似的联合后验概率分布,这种分布精确地逼近真实的潜在分布,只需要100s-1000s的模型评估来训练GP,相比之下,MCMC方法需要100000个,通常更多,取决于推理问题。近似边缘后验分布的中间值通常都在真值的1-5%范围内,具有与真分布相似的不确定性。我们已经验证了2-5维问题的正确性,而Kandasamy等人。(2015)发现在9维情况下,bape算法在精度和速度方面明显优于mcmc方法。有关详细信息,请参阅他们的文章,并查看示例以了解更多信息和示例用例。


代码状态和文档


[构建状态](http://img.shields.io/travis/dflemin3/approxposterior/master.svg?style=flat)(https://travis-ci.org/dfl)emin3/批准者)

[![DOI](http://joss.theoj.org/papers/10.21105/joss.00781/status.svg)(https://doi.org/10.21105/joss.00781)

许多示例。

conda install-c conda forge george
```

>;源代码:

``bash
python setup.py install
````


下面是一个基于wang&li(2017)示例的approxposterior简单应用程序。注意
我们修改了这个示例并将其缩短,这样只需1分钟即可运行。

要跟踪MCMC的进度,请在"近似运行"方法中设置"verbose=true"。此设置
输出x/m,其中m是要计算的mcmc迭代的总数,在本例中为5000,x是当前的
迭代次数。请注意,设置"verbose=true"还会输出其他诊断信息,例如mcmc何时结束、估计的老化情况以及其他有助于跟踪代码进度的数量。在这个例子中,为了简单起见,我们设置了``verbose=false```` python
#找到每个迭代的新点数
nmax=10最大迭代次数
dmax=0.1 kl发散收敛极限
kmax=5 dmax收敛的迭代次数在
nklsamples=10000用于计算kl散度的后验样本数
界限=(-5,5),(-5,5))前验界限
算法="bape"記使用kandasamy等人。(2015)形式主义

=np.array(lh.rosenbrocksample(m0))

expsquaredkernel
gp=gputils.defaultgp(theta,y)


lnprior=lh.rosenbrocklnprior,
lnlike=lh.rosenbrocklnlike,
priorsample=lh.rosenbrocksample,
algorithm=algorithm)

运行!
ap.run(m=m,nmax=nmax,dmax=dmax,kmax=kmax,bounds=bounds,estburnin=true,
nklsamples=nklsamples,mcmcmckwargs=mcmckwargs,cache=false,
samplerkwargs=samplerwargs,verbose=true)

查看最终的后验分布!
导入角点


图=角点。角点(样本,分位数=[0.16,0.5,0.84],显示标题=真,
缩放历史=真,绘制轮廓=真)

ig.savefig("finalposterior.png",bbox撸inches="tight")取消注释以保存
````


最终发行版将如下所示:

![Wang&Li(2017)示例的最终后验概率分布](paper/final_realture.png)


查看[示例](https://github.com/dflemin3/approxposterior/tree/master/examples/notebooks)Jupyter笔记本示例和说明目录。查看完整的[文档](https://dflemin3.github.io/approxposterior/)了解有关类、方法、变量以及如何使用代码的更深入的解释。


contribution
==


请随意分叉存储库,进行一些编辑,并打开一个拉取请求。
如果您发现错误,有建议等,请打开一个问题!

请引用此存储库和Kandasamy等人。(2015)和Wang&Li(2017)如果您使用此代码!



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

推荐PyPI第三方库


热门话题
java我可以扩展一个@Component并创建另一个@Component类,一次只能使用一个吗?   dice Java:使用静态方法在Main之外的方法中调用对象   Java中的泛型类型推理(#la C#)   java如何使用进程和PID过滤正确捕获logcat?   java Hibernate:无法获取检索到的关联列表   java Set滑动面板布局水平滚动已禁用   java中128位上的ipv6按位操作   java图形二叉搜索树节点间距   JavaSpring数据,MySQL,连接在8小时不活动后终止   java如何更改Android上必需的Facebook权限字段   java如何从未映射类返回hibernate中受影响的行数   java播放Http。上下文实现   SplashScreen中的java 安卓异常   java Android为什么在onCreate中显示文本   使用JavaPlot的java Spectrogram不起作用   java将SecurityContextToken设置为SOAP头