क्या इस साधारण पीएमएमसी मॉडल को गति देने का कोई तरीका है? 20-40 डेटा बिंदुओं पर, फिट होने में ~ 5-11 सेकंड लगते हैं।पीईएमसी मार्कोव मॉडल को कैसे गति दें?
running on 40 points
[-----------------100%-----------------] 2000 of 2000 complete in 11.5 sec
11.54 secs to run
(80 अंकों के साथ यह 20 सेकंड लेता है):
import pymc
import time
import numpy as np
from collections import OrderedDict
# prior probability of rain
p_rain = 0.5
variables = OrderedDict()
# rain observations
data = [True, True, True, True, True,
False, False, False, False, False]*4
num_steps = len(data)
p_rain_given_rain = 0.9
p_rain_given_norain = 0.2
p_umbrella_given_rain = 0.8
p_umbrella_given_norain = 0.3
for n in range(num_steps):
if n == 0:
# Rain node at time t = 0
rain = pymc.Bernoulli("rain_%d" %(n), p_rain)
else:
rain_trans = \
pymc.Lambda("rain_trans",
lambda prev_rain=variables["rain_%d" %(n-1)]: \
prev_rain*p_rain_given_rain + (1-prev_rain)*p_rain_given_norain)
rain = pymc.Bernoulli("rain_%d" %(n), p=rain_trans)
umbrella_obs = \
pymc.Lambda("umbrella_obs",
lambda rain=rain: \
rain*p_umbrella_given_rain + (1-rain)*p_umbrella_given_norain)
umbrella = pymc.Bernoulli("umbrella_%d" %(n), p=umbrella_obs,
observed=True,
value=data[n])
variables["rain_%d" %(n)] = rain
variables["umbrella_%d" %(n)] = umbrella
print "running on %d points" %(len(data))
all_vars = variables.values()
t_start = time.time()
model = pymc.Model(all_vars)
m = pymc.MCMC(model)
m.sample(iter=2000)
t_end = time.time()
print "\n%.2f secs to run" %(t_end - t_start)
केवल 40 डेटा बिंदुओं के साथ, इसे चलाने के लिए 11 सेकंड लेता है। यह एक खिलौना उदाहरण है। Lambda()
के अंदर अभिव्यक्तियां जो संक्रमण निर्धारित करती हैं, अभ्यास अधिक जटिल होती हैं। यह मूल कोड संरचना लचीला है (जबकि संक्रमण मैट्रिस के साथ मॉडल एन्कोडिंग कम लचीला है)। क्या समान कोड संरचना रखने का कोई तरीका है लेकिन बेहतर प्रदर्शन प्राप्त करें? यदि आवश्यक हो तो पीएमएमसी 3 पर स्विच करने के लिए खुश है। धन्यवाद।
pymc का कौन सा संस्करण उपयोग कर रहे हैं? 2.3.6 के लिए pymc प्रलेखन में मुझे Bernoulli फ़ंक्शन नहीं मिल सकता है, केवल Bernoulli_like [Doc] (https://pymc-devs.github.io/pymc/)। – CodeMonkey
यह 2.2 – slushy
में मौजूद है मुझे अनुकूलन के बारे में एक ही चिंता है (https://stackoverflow.com/questions/42205123/how-to-fit-a-method-belonging-to-an-instance-with-pymc3) –