PyMC3 में बायेसियन मॉडल का चयन


11

मैं अपने डेटा पर बायेसियन मॉडल चलाने के लिए PyMC3 का उपयोग कर रहा हूं।

मैं बायेसियन मॉडलिंग के लिए नया हूं, लेकिन इस साइट से कुछ ब्लॉग पोस्ट , विकिपीडिया और क्यूए के अनुसार , यह बेयस कारक और बीआईसी मानदंड का उपयोग करने के लिए एक वैध दृष्टिकोण प्रतीत होता है जो यह चुनने में सक्षम है कि कौन सा मॉडल मेरे डेटा का सबसे अच्छा प्रतिनिधित्व करता है (जो उत्पन्न करता है) मेरी जानकारी)।

बेयस कारक की गणना करने के लिए, मुझे उन मॉडलों के सापेक्ष तुलना की आवश्यकता है जिनकी मैं तुलना करना चाहता हूं। यह शायद मेरे लिए थोड़ा उलझन भरा है लेकिन मुझे लगता है कि संभावना होने के दो तरीके हैं (अगर मैं गलत हूं तो मुझे सुधारें):

  • मॉडल के सरल होने पर बीजीय तरीका: विकिपीडिया उदाहरण बेयस फैक्टर पेज देखें

  • संख्यात्मक तरीका: यह वही है जो MCMC एल्गोरिदम के साथ PyMC3 करता है

मैं कैसे संभावना की पहुंच बना सकता हूं और इसलिए 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}))

ध्यान दें कि यह मॉडल रूपांतरित चर का उपयोग कर रहा है, इसलिए मुझे इनकी आपूर्ति करनी होगी। आप इसके बाद () का एक्सपोजर ले सकते हैं और इसे एक संख्यात्मक इंटीग्रेटर के अंदर उपयोग कर सकते हैं, उदाहरण के लिए scipy.ingrgrate द्वारा प्रदान किया गया। समस्या यह है कि केवल 5 मापदंडों के साथ, यह बहुत धीमा होगा।

बेयस फैक्टर आमतौर पर गणना करने में बहुत मुश्किल होते हैं क्योंकि आपको पूर्ण पैरामीटर स्थान पर एकीकृत करना होता है। उसके लिए MCMC नमूनों का उपयोग करने के लिए कुछ विचार हैं। इस पोस्ट को देखें, और विशेष रूप से अधिक जानकारी के लिए टिप्पणी अनुभाग: https://radfordneal.wordpress.com/2008/08/17/the-harmonic-mean-of-the-likelihood-worst-monte-carlo-methodever / BIC के लिए मामला दुर्भाग्य से समान है।

यदि आप वास्तव में बेयस फैक्टर की गणना करना चाहते हैं, तो आप सैवेज डिकी अनुपात परीक्षण (उदाहरण के लिए http://drsmorey.org/bibtex/upload/Wagenmakers:etal:2010.pdf देखें ) कर सकते हैं, लेकिन यह एप्लिकेशन सीमित है।

मुझे लगता है कि आप मॉडल की तुलना करने की कोशिश कर रहे हैं, जो कि कई राय और समाधान के साथ एक क्षेत्र है (कुछ को लागू करना मुश्किल है, जैसे बीएफएस)। एक उपाय जो बहुत आसान गणना है वह है डीवाइस सूचना मानदंड। इसके डाउनसाइड्स हैं, हालांकि उनमें से कुछ को रीमेड किया जा सकता है (देखें http://onlinelibrary.wiley.com/doi/10.1111/rssb.12062/abstract )। दुर्भाग्य से हमने अभी तक pymc3 कोड को पोर्ट नहीं किया है, लेकिन यह बहुत आसान होगा (pymc2 कार्यान्वयन के लिए यहां देखें: https://github.com/pymc-devs/pymc/blob/895c24f62p9f5d786bce7ac4fe88edb4ad220364/pymc/MC.py L410 )।

क्रुश्के ने पूर्ण मॉडल का निर्माण करने के लिए दृष्टिकोण का पक्ष लिया और यह आपको बताया कि कौन से पैरामीटर मायने रखते हैं। आप स्वयं मॉडल में परिवर्तनशील चयन भी कर सकते हैं (उदाहरण के लिए देखें http://arxiv.org/pdf/math/0505633.pdf )।

अंत में, अधिक संपूर्ण उपचार के लिए, इस हालिया ब्लॉग पोस्ट को देखें: http://jakevdp.github.io/blog/2015/08/07/frequentism-and-bayesianism-5-model-select//


1
DIC को pymc3 में जोड़ने के लिए एक मुद्दा खोला: github.com/pymc-devs/pymc3/issues/797
twiecki
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.