userWarning pymc3:重新参数化是什么意思?

时间:2018-01-10 09:39:03

标签: pymc3 user-warning

我使用DensityDist分布构建了一个pymc3模型。我有四个参数,其中3个使用Metropolis,一个使用NUTS(这是由pymc3自动选择的)。但是,我得到两个不同的UserWarnings 1.Chain 0包含调谐后的多个发散样本。如果增加target_accept无助于尝试重新参数化。 我知道这里重新参数化意味着什么? 2.链0中的接受概率与目标不匹配。它是,但应该接近0.8。尝试增加调整步骤的数量。

通过几个例子,我使用'random_seed','discard_tuned_samples','step = pm.NUTS(target_accept = 0.95)'等等,并删除了这些用户警告。但我找不到如何决定这些参数值的细节。我相信这可能已在各种背景下进行过讨论,但我无法找到可靠的文档。我正在做一个试错法,如下所示。

用patten_study:     #SEED = 61290425#51290425     step = pm.NUTS(target_accept = 0.95)     trace = sample(step = step)#4000,tune = 10000,step = step,discard_tuned_samples = False)#,random_seed = SEED)

我需要在不同的数据集上运行它们。因此,我正在努力为我正在使用的每个数据集修复这些参数值。有没有办法我给这些值或找到结果(如果有任何用户警告,然后尝试其他值)并在循环中运行它?

如果我问一些愚蠢的东西,请原谅我!

1 个答案:

答案 0 :(得分:3)

在这种情况下,重新参数化基本上是找到一个不同但等效的模型,它更容易计算。根据您的模型细节,您可以做很多事情:

  • 您可以使用具有较大差异的正态分布,而不是使用统一分布。
  • 从中心层次模型更改为 non-centered 之一。
  • 用Student-T替换高斯
  • 将离散变量建模为连续
  • this示例
  • 中的变量边缘化

根据您对模型和问题的了解,您应该决定这些变化是否有意义。