PyMC acemi: takılan modelden nasıl numune alınır


12

Çok basit bir model deniyorum: Hassasiyeti bildiğimi varsaydığım bir Normal yerleştirmek ve sadece ortalamayı bulmak istiyorum. Aşağıdaki kod Normal'e uygun görünüyor. Ancak montajdan sonra, modelden örnek almak istiyorum, yani datadeğişkenime benzer yeni veriler üretmek istiyorum . trace("mean")Ortalama değişken için örnek almak için kullanabileceğimi biliyorum . Ancak modelin kendisinden nasıl yeni örnekler alabilirim?

Örneğin http://pymc-devs.github.io/pymc/database.html#accessing-sampled-data dokümanlarına baktım . Ayrıca madencilik felaketleri ve Olasılıksal Programlama defterlerinden birkaçı gibi birkaç örneğe de baktım ve hiçbiri bundan bahsetmedi. Ben (az ya da çok bir MCMC acemi) takılan modelden örneklemenin bütün mesele olmasını bekledim! Neyi kaçırıyorum?

from pymc import *
data = np.array([-1, 0, 4, 0, 2, -2, 1, 0, 0, 2, 1, -3, -1, 0, 0, 1, 0, 1])
mean = Uniform("mean", -4, 4)
precision = 2.0**-2
obs = Normal("obs", mean, precision, value=data, observed=True)
model = Model( {"mean": mean, "obs": obs})
mcmc = MCMC(model)
mcmc.sample(10000, 1000, 1)
# I can get samples for the "mean" variable
mean_samples = mcmc.trace("mean")[:]
hist(mean_samples)
# but how can I do the equivalent of mcmc.trace("obs")?

Kesinlikle sahip olduğum soru! Tahmini örneklemenin pymc3'te basitleştirilmiş olup olmadığını merak ediyorum ...
Vladislavs Dovgalecs

Yanıtlar:


15

Tahmini dağıtım olarak adlandırılan şeye bakıyorsunuz . Bunu eklemek çok basit. Oluşturmadan önce Modelek stokastik değişkeni ekleyin:

predictive = mc.Normal( "predictive", mean, precision )
model = Model( {"mean": mean, "obs": obs, "pred":predictive})

...

predictive_traces = mcmc.trace("predictive")[:]
hist( predictive_traces )

Takılan modelden yapay veriler

Bu takılan modelden yapay veriler üretecektir. Bu gözetimi dikkatime sunduğunuz için teşekkür ederim, BMH projesine dahil edeceğim.


N'nin rastgele olduğu n rastgele değişken dizisini nasıl yaratırsınız? stackoverflow.com/questions/45283843/… (Üzgünüm bu çok fazla ...)
drake

5

Birkaç yıl sonra PyMC3 kullanarak aynı şeyi ararken buraya indi, bu yüzden yeni sürümle ilgili bir cevap bırakacağım: ( Posterior Predictive Checks'dan ).

ppc = pm.sample_ppc(trace, samples=500, model=model, size=100)

Şimdi ppc, her biri posteriordan farklı bir parametre ayarı kullanan 500 oluşturulan veri kümesi (her biri 100 örnek içerir) içerir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.