我使用 DensityDist 分布构建了一个 pymc3 模型。我有四个参数,其中 3 个使用 Metropolis,一个使用 NUTS(这是由 pymc3 自动选择的)。但是,我收到两个不同的用户警告 1.链 0 包含调谐后的发散样本数。如果增加target_accept
无助于重新参数化。 我知道这里的重新参数化是什么意思吗? 2. 链 0 中的接受概率与目标不匹配。它是 ,但应该接近 0.8。尝试增加优化步骤的数量。
通过挖掘一些例子,我使用了"random_seed","discard_tuned_samples","step = pm"。坚果(target_accept=0.95)'等等,并摆脱了这些用户警告。但我找不到如何确定这些参数值的详细信息。我相信这可能已经在各种上下文中讨论过,但我无法找到可靠的文档。我正在做一个试错方法,如下所示。
与patten_study: #SEED = 61290425 #51290425 步骤 = 下午。螺母(target_accept=0.95) 跟踪 = 样本(步骤 = 步骤)#4000,调谐 = 10000,步骤 =步骤,discard_tuned_samples=假)#,random_seed=种子)
我需要在不同的数据集上运行这些。因此,我正在努力为我正在使用的每个数据集修复这些参数值。有什么方法可以给出这些值或找到结果(如果有任何用户警告,然后尝试其他值)并在循环中运行它?
如果我问一些愚蠢的事情,请原谅我!
在这种情况下,重新参数化基本上是找到一个不同但等效的模型,它更容易计算。根据模型的详细信息,您可以执行许多操作:
- 您可以使用方差较大的正态分布,而不是使用均匀分布。
- 从中心分层模型更改为 非居中 一。
- 用学生 T 替换高斯
- 将离散变量建模为连续变量
- 边缘化变量,如本例所示
这些更改是否有意义是您应该根据您对模型和问题的了解来决定的。