2014-09-05 2 views
2

Я хотел бы осуществить для реализации процесса Дирихле примера ссылки в Implementing Dirichlet processes for Bayesian semi-parametric models (Источника: here) в PyMC 3.процесс Дирихле в PyMC 3

В примере стержневой вероятность нарушения вычисляется с использованием pymc.deterministic декоратор:

v = pymc.Beta('v', alpha=1, beta=alpha, size=N_dp) 
@pymc.deterministic 
def p(v=v): 
    """ Calculate Dirichlet probabilities """ 

    # Probabilities from betas 
    value = [u*np.prod(1-v[:i]) for i,u in enumerate(v)] 
    # Enforce sum to unity constraint 
    value[-1] = 1-sum(value[:-1]) 

    return value 

z = pymc.Categorical('z', p, size=len(set(counties))) 

Как бы реализовать это в PyMC 3, который использует Theano для вычисления градиента?

редактировать: Я попробовал следующее решение с помощью метода theano.scan:

with pm.Model() as mod: 
    conc = Uniform('concentration', lower=0.5, upper=10) 
    v = Beta('v', alpha=1, beta=conc, shape=n_dp) 
    p, updates = theano.scan(fn=lambda stick, idx: stick * t.prod(1 - v[:idx]), 
          outputs_info=None, 
          sequences=[v, t.arange(n_dp)]) 
    t.set_subtensor(p[-1], 1 - t.sum(p[:-1])) 
    category = Categorical('category', p, shape=n_algs) 
    sd = Uniform('precs', lower=0, upper=20, shape=n_dp) 
    means = Normal('means', mu=0, sd=100, shape=n_dp) 
    points = Normal('obs', 
        means[category], 
        sd=sd[category], 
        observed=data) 

    step1 = pm.Slice([conc, v, sd, means]) 
    step3 = pm.ElemwiseCategoricalStep(var=category, values=range(n_dp)) 
    trace = pm.sample(2000, step=[step1, step3], progressbar=True) 

Который, к сожалению, очень медленно и не получить исходные параметры синтетических данных.

Есть ли лучшее решение, и это даже правильно?

ответ

1

Не уверен, что у меня есть хороший ответ, но, возможно, это может быть ускорено, вместо этого используйте anano blackbox op, который позволяет вам писать дистрибутив (или детерминированный) в коде python. Например: https://github.com/pymc-devs/pymc3/blob/master/pymc3/examples/disaster_model_arbitrary_deterministic.py

Смежные вопросы