2014-05-07 5 views
8

का समानांतर कोई व्यक्ति PyMC MCMC कोड को समानांतर कैसे कर सकता है इस पर कुछ सामान्य निर्देश दे सकता है। मैं here दिए गए उदाहरण के बाद LASSO रिग्रेशन चलाने की कोशिश कर रहा हूं। मैंने कहीं पढ़ा है कि समानांतर नमूना डिफ़ॉल्ट रूप से किया जाता है, लेकिन क्या मुझे अभी भी काम करने के लिए Parallel Python जैसे कुछ उपयोग करने की आवश्यकता है?पीईएमसी

यहां कुछ संदर्भ कोड है जो मैं अपनी मशीन पर समानांतर करने में सक्षम होना चाहता हूं।

x1 = norm.rvs(0, 1, size=n) 
x2 = -x1 + norm.rvs(0, 10**-3, size=n) 
x3 = norm.rvs(0, 1, size=n) 

X = np.column_stack([x1, x2, x3]) 
y = 10 * x1 + 10 * x2 + 0.1 * x3 

beta1_lasso = pymc.Laplace('beta1', mu=0, tau=1.0/b) 
beta2_lasso = pymc.Laplace('beta2', mu=0, tau=1.0/b) 
beta3_lasso = pymc.Laplace('beta3', mu=0, tau=1.0/b) 

@pymc.deterministic 
def y_hat_lasso(beta1=beta1_lasso, beta2=beta2_lasso, beta3=beta3_lasso, x1=x1, x2=x2, x3=x3): 
    return beta1 * x1 + beta2 * x2 + beta3 * x3 

Y_lasso = pymc.Normal('Y', mu=y_hat_lasso, tau=1.0, value=y, observed=True) 

lasso_model = pymc.Model([Y_lasso, beta1_lasso, beta2_lasso, beta3_lasso]) 
lasso_MCMC = pymc.MCMC(lasso_model) 
lasso_MCMC.sample(20000,5000,2) 

उत्तर

9

ऐसा लगता है कि आप PyMC2 उपयोग कर रहे हैं, और जहाँ तक मुझे पता है, आप गणना समानांतर, IPython.parallel जैसे कुछ अजगर दृष्टिकोण का उपयोग करना चाहिए। ऐसा करने के कई तरीके हैं, लेकिन जो कुछ मुझे पता है वे थोड़ा जटिल हैं। यहां an example of one, which uses PyMC2, IPCluster, and Wakari है।

PyMC3 में, समानांतर नमूना psample विधि में कार्यान्वित किया जाता है, लेकिन आपके संदर्भ कोड PyMC3 प्रारूप में अपडेट करने की आवश्यकता होगी:

with pm.Model() as model: 
    beta1 = pm.Laplace('beta1', mu=0, b=b) 
    beta2 = pm.Laplace('beta2', mu=0, b=b) 
    beta3 = pm.Laplace('beta3', mu=0, b=b) 

    y_hat = beta1 * x1 + beta2 * x2 + beta3 * x3 
    y_obs = pm.Normal('y_obs', mu=y_hat, tau=1.0, observed=y) 

    trace = pm.psample(draws=20000, step=pm.Slice(), threads=3) 
8

PYMC3 नमूना में psample विलय कर दिया गया।

पैरामीटर njobs > 1 पैरामीटर समानांतर में चलाने के लिए।

pymc.sample समारोह के लिए उपयोग है:

sample(draws, step, start=None, trace=None, chain=0, njobs=1, tune=None, progressbar=True, model=None, random_seed=None) नोट अगर आप njobs=None निर्धारित करते हैं, यह CPU की संख्या लागू हो जाएगी - 2.

मुझे आशा है कि इस मदद करता है।