跳到内容

Roth-Lab/pgsm公司

文件夹和文件

姓名姓名
上次提交消息
上次提交日期

最近一次提交

 
 
 
 
 
 
 
 
 
 
 
 
 

存储库文件导航

PGSM公司

Python实现“混合模型中贝叶斯推断的粒子吉布斯分裂合并采样”中的采样器。该软件的0.1.1版本用于本文中的所有实验,可以找到代码在这里.

请使用问题跟踪器报告任何问题。有关软件或PGSM方法的问题可以在用户组.

安装

需要安装以下依赖项

  • python 2.7.x
  • 麻木
  • numpy公司
  • 熊猫
  • 松软的

我们建议使用迷你公寓获取Python,然后使用康达命令安装依赖项。

一旦安装了所需的依赖项,就可以通过运行setup.py安装从存储库根目录。

如果您希望修改代码,可以使用python设置.py开发以开发模式安装软件包。这将使您的修改立即生效。

正在运行

有关如何运行代码的示例,请参阅示例/normal_mixture.py.下面我们详细介绍了库的结构,以及如何实例化采样器并将其用于采样。

采样器

有三种基本的采样器。

  1. pgsm.mcmc.collapsed_吉布斯。折叠吉布斯采样器-标准折叠吉布斯取样器。

  2. pgsm.mcmc.particle_gibbs_split_merge.粒子GibbsSplitMergeSampler-粒子吉布斯分裂合并(PGSM)采样器。

  3. pgsm.mcmc.sams。顺序分配的合并拆分采样器-顺序分配分割合并(SAMS)采样器。

此外,还有两个方便的采样器,它们封装了基本采样器。

  1. pgsm.mcmc.混合。混合取样器-混合取样器,设计用于交错吉布斯和分割合并核。

  2. pgsm.mcmc.dp页。Dirichlet过程采样器-Dirichlet采样器,包装任何采样器并在浓度参数之前使用Dirichle过程分区和Gamma之前。

要实例化基本采样器,您需要先定义分布和分区。支持的分发内容包括

  • 具有正态逆Wishart先验的正态似然
  • 具有Beta a先验的多元Bernoulli
  • 具有统一先验的特定于域的PyClone模型

可以在中找到pgsm.分配.支持的分区优先级为

  • 迪里克莱过程
  • 有限对称Dirichlet

可以在中找到pgsm.分区_优先级.

SAMS和PGSM采样器都需要SplitMergeSetupKernel。该内核的主要功能是提出一对锚点。中提供了许多内核pgsm.mcmc.split_merge设置.当使用两个以上锚点时,当前只有UniformSplitMergeSetupKernel可以与PGSM一起使用。

设置取样器

在下面的示例中,我们将设置一个具有2D正态分布和Dirichlet过程分区的模型。

首先,我们设置分发。

 pgsm公司.分配.最大值 进口 多元正态分布

昏暗的 = 2
距离 = 多元正态分布(昏暗的)

接下来,我们在浓度为1.0之前设置Dirichlet过程分区。

 pgsm公司.分区_优先级 进口 Dirichlet进程分区优先

初始浓度 = 1
分区_前 = Dirichlet进程分区优先(初始浓度)

现在我们可以创建一个折叠吉布斯采样器。

 pgsm公司.mcmc公司.坍塌的吉布斯 进口 折叠吉布斯采样器

吉布斯取样机 = 折叠吉布斯采样器(距离,分区_前)

对于SAMS和PGSM采样器,我们首先创建一个设置内核。为了简单起见,我们将使用统一设置内核,该内核随机一致地提出定位点。

从pgsm.mcmc.split_merge_setup导入UniformSplitMergeSetupKernelsetup_kernel=UniformSplitMergeSetupKernel(数据、分布、分区优先级)

现在我们可以创建SAMS采样器。

 pgsm公司.多功能多媒体计算机.萨姆 进口 顺序分配的合并拆分采样器

sams_取样器 = 顺序分配的合并拆分采样器(距离,分区_优先级,设置内核)

PGSM采样器需要两个附加组件才能创建。首先是顺序蒙特卡罗(SMC)内核。中提供了三个选项pgsm.smc.内核.

  • pgsm.smc.内核。统一拆分合并内核-统一提出新的锚块。
  • pgsm.smc.内核。完全自适应拆分合并内核-提出一种新的锚块,其概率与重要性抽样权重成正比。
  • pgsm.smc.内核。退火分裂合并内核-PGSM文件中描述的退火方案。

我们将使用退火内核。

 pgsm公司.smc公司.内核 进口 退火分裂合并内核

smc_kernel(内核) = 退火分裂合并内核(距离,分区_前)

其次,我们需要一个SMC采样器。有三种选择。

  • pgsm.smc.采样器。独立SMC采样器-没有条件路径的标准SMC。这必须与Metropolis Hastings接受拒绝步骤相结合,以创建粒子独立的Metropolis-Hasting(PIMH)采样器。这是出于教学目的而提供的,但在PGSM论文中没有使用。
  • pgsm.smc.采样器。颗粒吉布斯采样器-标准颗粒吉布斯(PG)采样器。这是为了教学目的而提供的,但隐式ParticleGibbsSampler应该在实践中使用。
  • pgsm.smc.采样器。隐式ParticleGibbsSampler-PG采样器的计算效率更高。

我们将使用隐式ParticleGibbsSampler用于PGSM论文。我们将使用20个粒子和0.5的相对ESS重采样阈值。

 pgsm公司.smc公司.取样器 进口 隐式ParticleGibbsSampler

smc_取样器 = 隐式ParticleGibbsSampler(20,重采样阈值=0.5)

最后,我们可以创建PGSM采样器。

 pgsm公司.mcmc公司.粒子_gibbs_split_merge 进口 粒子吉布斯分裂合并采样器

pgsm_采样器 = 粒子吉布斯分裂合并采样器(smc_kernel(内核),smc_取样器,拆分合并设置内核)

使用取样器

创建采样器后,运行采样器的过程是相同的。所有采样器都执行样品方法,该方法将当前聚类和观察到的数据作为参数,并返回更新的聚类。

假设我们有numpy公司数组,数据,其中列是维度,行是数据点。要使用上面创建的PGSM采样器(其他采样器相同)进行100次迭代,从完全连接的初始化开始,我们执行以下操作。

进口 numpy公司 作为 净现值

群集 = 净现值.0(数据.形状[0)#创建包含所有数据点的初始群集。

对于  在里面 范围(100)以下为:群集 = pgsm_采样器.样品(群集,数据)

关于

未提供描述、网站或主题。

资源

星星

观察者

叉子

包装

未发布包

语言文字