我正在尝试使用emcee
python 包从分布中提取样本并最大化我的数据来自采样参数的可能性。
例如,我有一个参数N
,我试图为 N 找到一个最大化后验似然的值。(我实际上使用了 3 个参数,但为了简单起见,我在此示例中使用了 1)。
我跑了:
sampler = emcee.EnsembleSampler(100, 3, logL, args=[new_data])
我为我的参数选择了初始位置p0
。
然后我跑了:
pos, prob, state = sampler.run_mcmc(p0, 100) # burn in
sampler.reset()
pox, prob, state = sampler.run_mcmc(pos, 100, rstate0=state) # sample
它大部分都在工作,但有时采样器会为 N 选择非物理的值。
那么如何对采样器选择的值范围进行限制呢?例如,也许我希望采样器停止尝试N
作为负数或停止N
大于 100。
我知道我可以更改自己的似然函数,以使非物理值付出很大的代价并不受青睐——但我不希望采样器一开始就被允许选择它们。
我现在认为我应该建立我的似然函数,以便我不希望采样器选择的数字(例如负数)受到惩罚并给予非常低的可能性。
我只是希望有人确认这是我应该做的,以防我错过了一种更简单的方法来限制Emcee
本身选择哪些数字。