เริ่มต้น PyMC: วิธีตัวอย่างจากโมเดลที่ติดตั้งจริง


12

ฉันกำลังลองใช้แบบจำลองที่ง่ายมาก: ปรับค่าปกติที่ฉันคิดว่าฉันรู้ความแม่นยำและฉันแค่ต้องการหาค่าเฉลี่ย รหัสด้านล่างดูเหมือนว่าจะพอดีกับปกติอย่างถูกต้อง แต่หลังจากการติดตั้งฉันต้องการตัวอย่างจากแบบจำลองคือสร้างข้อมูลใหม่ซึ่งคล้ายกับdataตัวแปรของฉัน ฉันรู้ว่าฉันสามารถใช้trace("mean")เพื่อรับตัวอย่างสำหรับตัวแปรค่าเฉลี่ย แต่ฉันจะหาตัวอย่างใหม่จากโมเดลเองได้อย่างไร

เราได้ตรวจสอบเอกสารเช่นhttp://pymc-devs.github.io/pymc/database.html#accessing-sampled-data ฉันได้ดูตัวอย่างบางส่วนเช่นภัยพิบัติจากการขุดและอีกหลายรายการจากสมุดบันทึก Probabilistic Programming และไม่มีใครพูดถึงเรื่องนี้ ฉัน (เริ่มต้น MCMC มากขึ้นหรือน้อยลง) คาดว่าการสุ่มตัวอย่างจากโมเดลที่ติดตั้งไว้นั้นเป็นจุดรวม! ฉันกำลังคิดถึงอะไร

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")?

คำถามที่ฉันมี! สงสัยว่าการสุ่มตัวอย่างการทำนายนั้นง่ายขึ้นใน pymc3 หรือไม่ ...
Vladislavs Dovgalecs

คำตอบ:


15

คุณกำลังมองหาสิ่งที่เรียกว่าการกระจายการทำนาย การรวมสิ่งนี้ง่ายมาก ก่อนที่จะสร้างให้Modelเพิ่มตัวแปรสุ่มเพิ่มเติม:

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

...

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

ข้อมูลประดิษฐ์จากโมเดลที่ติดตั้ง

สิ่งนี้จะสร้างข้อมูลประดิษฐ์จากโมเดลที่ติดตั้ง ขอบคุณที่ให้ความสำคัญกับการกำกับดูแลของฉันฉันจะรวมไว้ในโครงการ BMH


คุณจะสร้างอาเรย์ของตัวแปรสุ่ม n ตัวที่ n สุ่มอย่างไร stackoverflow.com/questions/45283843/… (ขออภัยนี่มันมากเกินไป ... )
drake

4

ลงจอดที่นี่หลายปีต่อมาเมื่อมองหาสิ่งเดียวกันโดยใช้ PyMC3 ดังนั้นฉันจะทิ้งคำตอบที่เกี่ยวข้องกับเวอร์ชั่นใหม่: (จากการตรวจสอบการทำนายหลัง )

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

ตอนนี้ ppc มีชุดข้อมูลที่สร้างขึ้น 500 ชุด (มีตัวอย่าง 100 ตัวอย่าง) แต่ละชุดใช้การตั้งค่าพารามิเตอร์ที่แตกต่างจากด้านหลัง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.