我使用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)
我需要在不同的数据集上运行它们。因此,我正在努力为我正在使用的每个数据集修复这些参数值。有没有办法我给这些值或找到结果(如果有任何用户警告,然后尝试其他值)并在循环中运行它?
如果我问一些愚蠢的东西,请原谅我!
答案 0 :(得分:3)
在这种情况下,重新参数化基本上是找到一个不同但等效的模型,它更容易计算。根据您的模型细节,您可以做很多事情:
根据您对模型和问题的了解,您应该决定这些变化是否有意义。