0
我在pymc模型迭代,簡化什麼是真正的pymc
import pymc as pm
a = pm.Normal('a', 0,5)
b = pm.Normal('b', 0,5)
cnt = 0
@pm.deterministic
def mu(a=a, b=b):
global cnt
cnt += 1
return a + b*x # x and y were loaded from csv
y_hat = pm.Normal('y', mu, 1, observed=True, value=y)
mc = pm.MCMC([a,b,mu,y_hat])
mc.sample(100)
print (cnt)
結果:在模型運行
240
後,我希望cnt
爲100,但打印出來給大約240(不是每個採樣都返回相同的數值,但大概是這個數字)。我認爲pymc
可能在前幾次中進行了一些調整,但運行數千次迭代後,cnt
總是比mcmc迭代大2倍。
- 這是什麼原因?
- 我可以使用手動調整來控制它嗎?
我正在嘗試擬合一個動態模型,其中'mu'實際上是一組需要運行幾秒鐘的差分方程。因此,運行幾千次迭代需要一天的時間,並且如果'mu'被評估的更多,那麼擬合參數('y)會使它有時爲3天。 – DeanLa
我會建議分析這些數據,看看這麼長時間。它是一個非常大的數據集? MCMC不能很好地適應大數據。如果是這樣的話,你可以看看PyMC3,其中包括非抽樣方法推理,即變分推理。 –
數據很小。模型本身很長。在「pymc」範圍之外的一次運行是時間消費者 - 它是一個動態模型,約1000個時間戳上有大約200個隔間。 – DeanLa