करना MCMC: गुड़ / स्टेन का उपयोग करें या इसे स्वयं लागू करें


13

मैं बायेसियन स्टेटिस्टिक्स रिसर्च में नया हूं। मैंने शोधकर्ताओं से सुना कि बायेसियन शोधकर्ताओं ने JAGS / स्टेन जैसे उपकरणों का उपयोग करने के बजाय MCMC को खुद से बेहतर तरीके से लागू किया है। क्या मैं यह पूछ सकता हूँ कि सीखने के उद्देश्य को छोड़कर, स्वयं के द्वारा MCMC एल्गोरिदम को लागू करने का क्या लाभ है (R की तरह "काफी तेज़" भाषाओं में नहीं)?


क्योंकि तब आप अपने स्वयं के प्रस्ताव वितरण को स्वयं चुन सकते हैं, आपको इसे ऐसे चुनना चाहिए कि मार्कोव श्रृंखला जिसके परिणामस्वरूप यह जितनी जल्दी हो सके पीछे की ओर परिवर्तित हो जाए।

धन्यवाद! क्या यह एकमात्र कारण है?
user112758

4
यदि आप एक लागू शोधकर्ता हैं जो अनुप्रयोगों के लिए इसका उपयोग करके अधिक बेस सीखना चाहते हैं, तो मैं आपको JAGS या स्टेन के साथ शुरू करने और फिर अपनी खुद की MCMC लिखने की ओर अग्रसर होने की सलाह दूंगा यदि आपको आपकी 'जरूरत' लगती है। इस बात को ध्यान में रखें कि JAGS और स्टेन में कुछ अलग तरह की ताकत और सीमाएँ हैं।
conjugateprior

धन्यवाद! हां, मैं अनुप्रयुक्त अनुसंधान कर रहा हूं। क्या आप मुझे JAGS और स्टेन की सीमाओं के बारे में अधिक बताएंगे। मैंने पहली बार स्टेन की कोशिश की, लेकिन मैंने पाया कि इसमें "ऑनलाइन मॉनीटरिंग" या "सैंपल तक नहीं है" अभिसरण "सुविधाएँ या ऐड-ऑन --- यह कष्टप्रद है, मैं अब JAGS की कोशिश कर सकता हूं।
user112758

जवाबों:


26

सामान्य तौर पर, मैं दृढ़ता से सुझाव दूंगा कि आप एक वास्तविक लागू बायेसियन विश्लेषण के लिए अपने खुद के MCMC कोडिंग नहीं करें। यह काम और समय दोनों का एक अच्छा सौदा है और कोड में कीड़े को पेश करने की बहुत संभावना है। स्टेन जैसे ब्लैकबॉक्स नमूने पहले से ही बहुत परिष्कृत नमूने का उपयोग करते हैं। मेरा विश्वास करो, आप केवल एक विश्लेषण के लिए इस कैलिबर का एक नमूना कोड नहीं करेंगे!

ऐसे विशेष मामले हैं जिनमें यह पर्याप्त नहीं होगा। उदाहरण के लिए, यदि आपको वास्तविक समय में एक विश्लेषण करने की आवश्यकता है (यानी आने वाले डेटा पर आधारित कंप्यूटर निर्णय), तो ये कार्यक्रम एक अच्छा विचार नहीं होगा। इसका कारण यह है कि स्टेन को C ++ कोड को संकलित करने की आवश्यकता है, जो अपेक्षाकृत सरल मॉडल के लिए पहले से तैयार किए गए नमूने को चलाने की तुलना में काफी अधिक समय ले सकता है। उस स्थिति में, आप अपना कोड लिखना चाह सकते हैं। इसके अलावा, मेरा मानना ​​है कि ऐसे विशेष मामले हैं जहां स्टेन जैसे पैकेज बहुत खराब तरीके से काम करते हैं, जैसे कि गैर-गाऊसी राज्य-अंतरिक्ष मॉडल (पूर्ण प्रकटीकरण: मेरा मानना ​​है कि स्टेन इस मामले में खराब प्रदर्शन करता है, लेकिन नहीं जानता)। उस स्थिति में, कस्टम MCMC को लागू करने के लिए इसके लायक हो सकता है। लेकिन यह अपवाद है, नियम नहीं!

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

इसके अलावा, जबकि किसी एक विश्लेषण के लिए अपना स्वयं का नमूना लिखने का कोई मतलब नहीं है , यह विश्लेषण के एक वर्ग के लिए अपना खुद का कोड लिखने के लिए बहुत कुछ समझ सकता है। जेएजी, स्टेन, आदि होने के कारण ब्लैक-बॉक्स नमूने हैं, आप किसी दिए गए मॉडल के लिए विशेषज्ञता प्राप्त करके चीजों को हमेशा तेज बना सकते हैं, हालांकि सुधार की मात्रा मॉडल पर निर्भर है। लेकिन जमीन से एक अत्यंत कुशल नमूना लिखना शायद 10-1,000 घंटे का काम है, अनुभव, मॉडल जटिलता आदि पर निर्भर करता है। यदि आप बायेसियन विधियों में शोध कर रहे हैं या सांख्यिकीय सॉफ्टवेयर लिख रहे हैं, तो यह ठीक है; यह तुम्हारा काम है लेकिन अगर आपका बॉस कहता है "अरे, तो क्या आप इस दोहराया उपायों के डेटा सेट का विश्लेषण कर सकते हैं?" और आप एक कुशल नमूना लिखने में 250 घंटे बिताते हैं, आपका बॉस परेशान हो सकता है। इसके विपरीत, आप इस मॉडल को स्टेन में कह सकते हैं, कह सकते हैं, 2 घंटे, और कुशल नमूना द्वारा प्राप्त 1 मिनट के रन समय के बजाय 2 मिनट का रन समय था।


3
+1। इसके अलावा, स्टेन सीधे असतत वितरण से जुड़ी कुछ समस्याओं को नहीं संभालता है, इसलिए आपको इनको एकीकृत करने के लिए पर्याप्त जानना होगा, जो कि अपने आप में सरल नहीं है, इसलिए यह एक ऐसा मामला हो सकता है जहां अपना खुद का रोल करने से मदद मिल सकती है। मेरा मानना ​​है कि JAGS ऐसे मामलों को सीधे हैंडल करता है, हालांकि, यदि आप BUGS / JAGS और स्टेन के अलग-अलग दर्शन अपने दिमाग में अलग रख सकते हैं, तो उनके बीच बस स्विच करना सबसे अच्छा होगा।
वेन

इसके अलावा, स्टेन में समस्याएं हो सकती हैं जहां एक विकर्ण यूक्लिडियन मीट्रिक पीछे के ज्यामिति के अनुकूल नहीं है; यह तब होता है जब अंतर का केवल एक संकीर्ण, विषम आकार का क्षेत्र होता है, जिसमें बहुत अधिक संभावना होती है। नतीजा यह है कि पीछे का नमूना लेना एक चट्टान के किनारे पर बाइक चलाने की कोशिश करने जैसा है: यदि आप एक गलत मोड़ लेते हैं, तो आप "गिर" सकते हैं!
साइकोरैक्स का कहना है कि

2
+1। छात्रों के लिए मेरी सामान्य अनुशंसा इसे JAGS में कोड करना है। अगर वह अच्छी तरह से काम नहीं करता है, तो इसे स्टेन में कोड करें। यदि वह अच्छी तरह से काम नहीं करता है, तो अपना नमूना लिखना शुरू करें। कुछ मॉडल भी हैं, उदाहरण के लिए स्थानिक मॉडल, जहाँ आप BUGS का उपयोग करना चाहते हैं। और कुछ मॉडल, जैसे गैर-गौसियन राज्य-अंतरिक्ष मॉडल, जहां आप NIMBLE का उपयोग करना चाहते हैं। अपना स्वयं का नमूना लिखकर शुरू करने का अवसर लागत बहुत अधिक है।
जर्दनेमि

मुझे "वास्तविक समय" के मामले की समझ नहीं है - अगर "पहले से तैयार" खुद का नमूना लेना संभव है तो पहले से संकलित स्टेन मॉडल का उपयोग करना इतना आसान क्यों नहीं है? मुझे आश्चर्य है कि अगर कोई एमसीएमसी वास्तविक समय के अनुप्रयोगों के लिए पर्याप्त तेज़ है।
जुहो कोक्कला

1
और मैं स्टेन के साथ पर्याप्त रूप से परिचित नहीं हूं कि वास्तव में नए मॉडलों के संकलन की आवश्यकता क्या है, लेकिन यह कल्पना करना भी मुश्किल नहीं है कि प्रतिबंध जो भी हो, एक गतिशील मॉडल मौजूद है जैसे कि नया डेटा आता है, मॉडल अधिक जटिल हो जाएगा और इसलिए recompiling आवश्यक होगा। मुझे लगता है कि गैर-पैरामीट्रिक तरीके (जिसमें पैरामीटर स्थान नमूना आकार के साथ बढ़ता है) उस मानदंड को फिट करेगा? लेकिन उस के आसपास होने के चालाक तरीके हो सकते हैं।
क्लिफ एबी

6

यह प्रश्न मुख्य रूप से राय आधारित है, लेकिन मुझे लगता है कि यहां एक उत्तर लिखने के लिए पर्याप्त है। एक शोध समस्या के लिए अपने स्वयं के नमूने को कोड करने के कई कारण हो सकते हैं। ये उनमे से कुछ है

  1. प्रस्ताव: जैसा कि fcop ने अपनी टिप्पणी में सुझाव दिया है, यदि नमूना MH है, तो अपने स्वयं के नमूने को कोडित करने से आपको सर्वश्रेष्ठ मिक्सिंग नमूना लेने के लिए प्रस्ताव वितरण के साथ खेलने की सुविधा मिलती है।

  2. लचीलापन: अंतर्निहित कार्यक्रमों में आपको वह लचीलापन नहीं मिल सकता है जो आप चाहते हैं। आप एक विशिष्ट यादृच्छिक मूल्य पर शुरू करना चाहते हैं, या एक विशिष्ट बीज संरचना का उपयोग कर सकते हैं।

  3. समझ: अपने स्वयं के नमूने को कोड करना, आपको मार्कर के व्यवहार को समझने में मदद करता है, जिससे मार्कोव श्रृंखला प्रक्रिया को अंतर्दृष्टि मिलती है। यह समस्या पर काम करने वाले एक शोधकर्ता के लिए उपयोगी है।

  4. ओनस: यदि जिस डेटा पर मैं अपने सभी बायेसियन निष्कर्ष निकाल रहा हूं, वह एक ऐसे प्रोग्राम से आता है, जिसे मैंने कोड नहीं किया था, तो ऑन्सेशन पर ऑनस अब मुझ पर नहीं है। एक शोधकर्ता के रूप में, मैं अपने द्वारा प्रस्तुत तरीकों / परिणामों की पूरी जिम्मेदारी लेना चाहूंगा। अंतर्निहित विधियों का उपयोग करना आपको ऐसा करने की अनुमति नहीं देता है।

शायद और भी कारण हैं, लेकिन ये चार हैं जो मुझे अपने स्वयं के नमूने कोड बनाते हैं।


6
मैं कहूंगा कि "ट्रस्ट" कारण विवादित है: स्टेन ओपन-सोर्स है और इसमें बहुत सारे योगदानकर्ता हैं, इसलिए कई व्यक्तियों ने इसे स्रोत कोड पर देखा है और इसलिए यह संभावना नहीं है कि इसमें गंभीर कीड़े हैं। एक और ओर, यदि आप इसे खुद से करते हैं तो आप हमेशा बग को नजरअंदाज कर सकते हैं कि आपके द्वारा किए गए - और सब लोग कीड़े बनाता है यह कोड की लाइनों की संख्या का मामला आप लिखते है ...
टिम

@ मैं सहमत हूँ। मैंने उस बात को प्रतिबिंबित करने के लिए बदल दिया है जो मैं कहने की कोशिश कर रहा था। धन्यवाद।
ग्रीनपार्क

5
अंडरस्टैंडिंग तर्क के लिए +1। हालाँकि, ओनस का तर्क थोड़ा ज़्यादा लगता है। लगभग कुछ भी आप खुद को कोड करते हैं, किसी और की सांख्यिकीय भाषा, रैखिक बीजगणित पुस्तकालय, यादृच्छिक संख्या जनरेटर आदि पर निर्भर करेंगे, इसलिए 'जिम्मेदारी लेना' डिग्री की बात है।
conjugateprior

@conjugateprior बिल्कुल सहमत हैं। जिस कारण उस पर मेरा जवाब पहले व्यक्ति में था। यह विशुद्ध रूप से मेरी राय थी।
ग्रीनपार्क

4

मैंने क्लिफ एबी के जवाब के लिए +1 दिया। एक छोटे से टिडबिट को जोड़ने के लिए, यदि आप निचले स्तर पर काम करना चाहते हैं, लेकिन कोड-एवरीथिंग-लेवल के लिए नीचे नहीं है, तो आपको लाप्लासडेमेन पैकेज के लिए चारों ओर प्रहार करना चाहिए । मूल लेखक शानदार था, लेकिन लगता है कि ग्रिड से हट गया है, और पैकेज किसी और ने ले लिया है। (यह गितुब पर है, मेरा मानना ​​है।)

यह एमसीएमसी में उपयोग किए गए एल्गोरिदम की एक प्रभावशाली संख्या को लागू करता है और इसमें शामिल विगनेट्स पढ़ने लायक हैं, भले ही आप पैकेज का उपयोग न करें। बहुत ज्यादा किसी भी तरह के नमूने के बारे में आपने पढ़ा है, इसमें है। आप BUGS / JAGS या Stan की तुलना में एक अलग तरीके से कोड करते हैं, और यह सभी R में है, लेकिन अक्सर यह इतना कुशल है कि यह प्रतिस्पर्धी है।


1
बेशर्म प्लग: आप [nimble] (r-nimble.org) का भी उपयोग कर सकते हैं जो आपको अपने MCMC को अनुकूलित करने की अनुमति देता है (अर्थात इस नोड के लिए स्लाइस सैंपलर का उपयोग करें, नोड्स के उस समूह के लिए अपडेटर को ब्लॉक करें, आदि) फिर से लिखने की आवश्यकता के बिना। यह हर बार नमूना होता है। और आप सीधे लागू होने के लिए अपने स्वयं के नमूने भी लिख सकते हैं! प्रकटीकरण: मैं इस परियोजना पर काम करता था।
एबी एबी

@ क्लिफब: LaplacesDemonयदि आप इससे परिचित हैं, तो इसके समान लगता है। सुनकर खुशी हुई nimble। मैं कम से कम इसे डाउनलोड करूँगा। (हालांकि कई LaplacesDemon vignettes डाउनलोड के लायक हो सकते हैं भले ही आप फुर्तीला उपयोग करें।) ... ओह, बस पृष्ठ पर गए। यदि इसका एसएमसी उपयोग करना आसान है, तो मैं एक बड़ा प्रशंसक बन जाऊंगा। एकमात्र आर पैकेज जो मैंने देखा है कि एसएमसी क्षैतिज रूप से जटिल है।
वेन

@CliffAB: वाह, nimbleवेबसाइट पढ़ने के बाद , यह बहुत प्रभावशाली है। मैंने कभी इसके बारे में क्यों नहीं सुना? यह BUGS / JAGS मॉडलिंग भाषा के लिए उपयोग किए जाने वाले लोगों के लिए एक बढ़िया विकल्प की तरह दिखता है। बेशक, वे वेबसाइट पर सबसे अच्छा संभव तुलना करेंगे, लेकिन फिर भी मुझे यह अभी तक पसंद है। (इसके अलावा rstanarmऔर brms, जो हुड के नीचे स्टेन का उपयोग करते हैं, आसानी से उपयोग में आने वाला आर चैंपियन होगा स्टेन।)
वेन

यह अभी भी बहुत नया है: v0.1 जारी किया गया था मुझे लगता है कि सिर्फ 2 साल पहले? और एसएमसी परियोजना के लिए एक बड़ा प्रेरक था: पीआई ने कण फिल्टर पर काफी प्रकाशन किया है और हर बार उन्हें खरोंच से लिखने से परेशान हो रहा था। लेकिन मैं वर्तमान काम के साथ थोड़ा सा रहा हूँ कि एसएमसी नमूनों की वर्तमान स्थिति क्या है; जब मैंने छोड़ा (लगभग दो साल पहले) हमने एक बहुत ही आदिम को एक साथ रखा था।
क्लिफ एबी

1
बस इस arXiv कागज का कहना है कि आप में रुचि हो सकती है।
क्लिफ एबी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.