การเลือกแบบจำลอง Bayesian ใน PyMC3


11

ฉันใช้ PyMC3 เพื่อเรียกใช้แบบจำลอง Bayesian กับข้อมูลของฉัน

ฉันใหม่สำหรับการสร้างแบบจำลอง Bayesian แต่จากการโพสต์บล็อกบางส่วน Wikipedia และQAจากเว็บไซต์นี้ดูเหมือนว่าจะเป็นแนวทางที่ถูกต้องในการใช้ตัวประกอบ Bayes และเกณฑ์ BIC เพื่อเลือกรูปแบบที่ดีที่สุดในการแสดงข้อมูลของฉัน ข้อมูลของฉัน)

ในการคำนวณปัจจัย Bayes ฉันต้องการโอกาสที่สัมพันธ์กันสำหรับโมเดลที่ฉันต้องการเปรียบเทียบ อาจจะสับสนเล็กน้อยสำหรับฉัน แต่ฉันคิดว่ามีสองวิธีที่จะได้รับโอกาส (แก้ไขฉันหากฉันผิด):

  • วิธีพีชคณิตเมื่อแบบจำลองง่าย: ดูตัวอย่างหน้าวิกิพีเดียของ Bayes

  • วิธีตัวเลข: นี่คือสิ่งที่ PyMC3 กับอัลกอริทึม MCMC

ฉันจะเข้าถึงโอกาสและเปรียบเทียบแบบจำลองของฉันใน PyMC3 ได้อย่างไร ฉันพบmodel.logpวิธีซึ่งตามเอกสารคือ "ฟังก์ชั่นความหนาแน่นของความน่าจะเป็นบันทึก" ฉันสามารถใช้สิ่งนั้นเพื่อสร้างโอกาสได้หรือไม่?

คำถามโบนัส: เมื่อมีการเปรียบเทียบทั้งสองรุ่นอัตราส่วนระหว่างความน่าจะเป็นทั้งสองจะถูกคำนวณ จะเกิดอะไรขึ้นถ้าคุณต้องการเปรียบเทียบหลายรุ่น

ตัวอย่าง PyMC3 ที่เป็นรูปธรรมจะมีประโยชน์มาก!

คำตอบ:


15

คุณสามารถคำนวณความน่าจะเป็นของโมเดลได้โดยใช้ model.logp () ในฐานะที่เป็นอินพุตก็ต้องมีจุด ตัวอย่างเช่นรุ่นที่ดีที่สุดจากไดเรกทอรีตัวอย่างที่ฉันสามารถทำได้:

np.exp(model.logp({'group1_mean': 0.1, 
                   'group2_mean': 0.2, 
                   'group1_std_interval': 1., 
                   'group2_std_interval': 1.2, 
                   'nu_minus_one_log': 1}))

โปรดทราบว่ารุ่นนี้ใช้ตัวแปรที่แปลงแล้วดังนั้นฉันต้องจัดหาสิ่งเหล่านี้ จากนั้นคุณสามารถใช้ exp () ของสิ่งนั้นและใช้มันในตัวรวมตัวเลขเช่นที่จัดทำโดย scipy.integrate ปัญหาคือว่าแม้จะมีเพียง 5 พารามิเตอร์นี้จะช้ามาก

โดยทั่วไปปัจจัย Bayes จะคำนวณได้ยากมากเพราะคุณต้องรวมพื้นที่พารามิเตอร์ทั้งหมด มีแนวคิดที่จะใช้ตัวอย่าง MCMC สำหรับสิ่งนั้น ดูโพสต์นี้และโดยเฉพาะอย่างยิ่งในส่วนความคิดเห็นสำหรับข้อมูลเพิ่มเติม: https://radfordneal.wordpress.com/2008/08/17/the-harmonic-mean-of-the-likelihood-worst-monte-carlo-method-ever / BIC นั้นคล้ายกันมาก

หากคุณต้องการคำนวณ Bayes Factor จริง ๆ คุณสามารถดูการทดสอบอัตราส่วน Savage Dickey (ดูตัวอย่างเช่นhttp://drsmorey.org/bibtex/upload/Wagenmakers:etal:2010.pdf ) แต่แอปพลิเคชั่นมีข้อ จำกัด

ฉันคิดว่าคุณกำลังพยายามทำการเปรียบเทียบแบบจำลองซึ่งเป็นเขตข้อมูลที่มีความคิดเห็นและวิธีแก้ไขปัญหามากมาย (มีบางอย่างที่ใช้งานได้ยากเช่น BF) มาตรการหนึ่งที่คำนวณได้ง่ายมากคือเกณฑ์ข้อมูล Deviance มีข้อเสียแม้ว่าจะสามารถแก้ไขได้บางส่วน (ดูที่http://onlinelibrary.wiley.com/doi/10.1111/rssb.12062/abstract ) แต่น่าเสียดายที่เราไม่ได้รังเพลิง pymc3 รหัส แต่มันจะเป็นเรื่องง่ายสวย (ดูที่นี่สำหรับการดำเนินงาน pymc2 นี้: https://github.com/pymc-devs/pymc/blob/895c24f62b9f5d786bce7ac4fe88edb4ad220364/pymc/MCMC.py# L410 )

Kruschke ชอบวิธีการเพียงแค่สร้างแบบจำลองเต็มรูปแบบและปล่อยให้มันบอกคุณว่าพารามิเตอร์ใดมีความสำคัญ คุณสามารถสร้างการเลือกตัวแปรในโมเดลเองได้ (ดูเช่นhttp://arxiv.org/pdf/math/0505633.pdf )

ในที่สุดสำหรับการรักษาที่สมบูรณ์มากขึ้นดูโพสต์บล็อกล่าสุดนี้: http://jakevdp.github.io/blog/2015/08/07/frequentism-and-bayesianism-5-model-selection/


1
เปิดปัญหาสำหรับการเพิ่ม DIC ใน pymc3: github.com/pymc-devs/pymc3/issues/797
twiecki
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.