मुख्य सामग्री पर जाएं

मार्कोव चेन मोंटे कार्लो (MCMC): जटिल प्रायिकता वितरणों का सैंपल लें

Markov Chain Monte Carlo का एक मार्गदर्शक — इसमें यह कैसे काम करता है, क्यों उपयोग होता है, सबसे आम एल्गोरिदम, और Python में बेयesian अनुमान के लिए इसे कैसे लागू करें, शामिल है।
अद्यतन 10 जून 2026  · 15 मि॰ पढ़ना

कुछ प्रायिकता वितरण इतने जटिल होते हैं कि आप उनके साथ सीधे काम नहीं कर सकते।

जब आप वास्तविक दुनिया के डेटा का मॉडल बनाते हैं, तो अक्सर गणित उपयोगी नतीजे देने से पहले ही टूट जाता है। कागज पर इंटीग्रल संभालने लायक दिखते हैं, लेकिन जैसे ही आप कुछ लैटेंट वेरिएबल जोड़ते हैं, वे तुरंत अनसुलझे हो जाते हैं। यह खासकर बेयesian अनुमान में आम है, जहाँ पश्च वितरण (posterior) आपके पूर्व विश्वासों को देखे गए डेटा के साथ जोड़ता है — और परिणाम ऐसा होता है जिसे आप किसी सरल सूत्र से सारांशित नहीं कर सकते।

मूल विचार यह है कि Markov Chain Monte Carlo (MCMC) सीधे गणित को हल करने के बजाय सिमुलेशन के जरिए वितरण का अन्वेषण करता है। यह ऐसे सैंपल खींचता है जो उसके आकार को प्रतिबिंबित करते हैं, बिना उसे पूरी तरह गणना किए।

इस लेख में, मैं MCMC के मुख्य सिद्धांतों पर बात करूँगा, सबसे आम एल्गोरिदम समझाऊँगा, और दिखाऊँगा कि इसे Python में कैसे लागू करें।

क्या आपको Python गणित का रिफ्रेशर चाहिए? हमारा डीप लर्निंग के लिए गणितीय अवधारणाओं का रहस्योद्घाटन ब्लॉग पोस्ट पढ़ें और देखें कि Numpy में गणित कैसे लागू होता है।

Markov Chain Monte Carlo क्या है?

Markov Chain Monte Carlo (MCMC) एल्गोरिदमों का एक परिवार है जो प्रायिकता वितरणों से सैंपल जनरेट करता है — भले ही वे वितरण इतने जटिल हों कि उनके साथ सीधे काम न किया जा सके।

नाम दो भागों में बँटता है। Markov chain यह नियंत्रित करती है कि एल्गोरिदम संभावित अवस्थाओं में कैसे आगे बढ़ता है। हर कदम केवल वर्तमान स्थिति पर निर्भर करता है, न कि उस पूरी इतिहास पर जिससे आप यहाँ पहुँचे हैं। Monte Carlo भाग का मतलब है कि आप रुचि के मात्रकों का आकलन करने के लिए रैंडम सैंपलिंग का उपयोग कर रहे हैं।

दोनों मिलकर, MCMC रैंडम सैंपलों की एक श्रृंखला बनाता है जो समय के साथ आपके लक्षित वितरण के आकार को दर्शाती है। यह सबसे पहले और सबसे बढ़कर एक सैंपलिंग तकनीक है। आप गणित को ठीक-ठीक हल नहीं कर रहे, बल्कि सिमुलेशन के जरिए उसका अनुमाजन कर रहे हैं।

Markov Chain Monte Carlo की आवश्यकता क्यों है

वास्तविक दुनिया के डेटा वितरण पाठ्यपुस्तक वाले उदाहरणों जितने सुथरे नहीं होते।

बेयesian अनुमान में, आप अक्सर पश्च वितरण की गणना करना चाहते हैं — यानी डेटा देखने के बाद आपके मॉडल पैरामीटर की अद्यतन प्रायिकता। सूत्र कागज पर आसान लगता है: पूर्व (prior) को लाइकलिहुड से गुणा कीजिए, फिर मार्जिनल लाइकलिहुड से भाग। आखिरी पद के लिए हर संभव पैरामीटर मान पर इंटीग्रेट करना पड़ता है। उच्च आयामों में, वह इंटीग्रल व्यावहारिक तौर पर असंभव हो जाता है।

जैसे-जैसे आपका मॉडल बढ़ता है, स्थिति और कठिन हो जाती है। अधिक पैरामीटर या लैटेंट वेरिएबल जोड़ने पर सटीक गणना एक बंद गली बन जाती है। आप यह कई सामान्य परिदृश्यों में देखेंगे:

  • बेयesian पदानुक्रमित मॉडल: जहाँ पैरामीटर दूसरे पैरामीटर पर निर्भर होते हैं, और ऐसी नेस्टेड डिस्ट्रीब्यूशन बनती हैं जिन्हें साफ-सुथरे ढंग से इंटीग्रेट नहीं किया जा सकता
  • उच्च-आयामी पश्च: जहाँ पैरामीटरों की संख्या ग्रिड-आधारित अनुमाजनों को संगणनात्मक रूप से अव्यावहारिक बना देती है
  • गैर-संयुग्मित प्रायर: जहाँ प्रायर और लाइकलिहुड मिलकर किसी पहचाने जाने योग्य वितरण में नहीं बदलते

इन स्थितियों में MCMC एक अच्छा उपाय है। वितरण को गणना करने के बजाय यह उससे सैंपल खींचता है। वे सैंपल आपको सब कुछ दे देते हैं, बिना इंटीग्रल हल किए।

MCMC के पीछे के दो विचार

MCMC दो विचारों को जोड़ता है जो अपने-अपने आप में सरल हैं, लेकिन साथ आने पर शक्तिशाली बन जाते हैं। आइए इन्हें समझते हैं।

Markov chains

एक मार्कोव चेन अवस्थाओं का ऐसा क्रम है जहाँ हर कदम केवल वर्तमान स्थिति पर निर्भर करता है।

पहले आप कहाँ थे, इससे फर्क नहीं पड़ता। आगे आप कहाँ जाएँगे, यह केवल आपकी वर्तमान स्थिति तय करती है। इस "बिना-स्मृति" गुण — जिसे औपचारिक रूप से Markov property कहा जाता है — की वजह से गणित संभालना आसान होता है और एल्गोरिदम व्यावहारिक बनता है।

चेन एक-एक कदम कर अवस्थाओं से गुजरती है, और सही सेटअप के साथ अंततः एक स्थिर वितरण (stationary distribution) में बस जाती है — एक स्थिर पैटर्न जहाँ किसी भी दी गई अवस्था में होने की प्रायिकता बदलना बंद कर देती है। यही स्थिर वितरण वह है जिसके साथ MCMC काम करने के लिए बनाया गया है।

Monte Carlo विधियाँ

Monte Carlo विधियाँ उन मात्रकों का आकलन करने के लिए रैंडम सैंपलिंग का उपयोग करती हैं जिन्हें सीधे गणना करना कठिन है।

विचार यह है कि किसी वितरण से पर्याप्त रैंडम सैंपल खींचे जाएँ, और फिर केवल सैंपलों को देखकर उसका माध्य, विचरण, या कोई अन्य गुणांक अनुमानित कर लिया जाए। जितने अधिक सैंपल खींचेंगे, आपके अनुमाजन उतने ही वास्तविक मानों के करीब होंगे।

अपने आप में, Monte Carlo विधियों के लिए वितरण से सीधे सैंपल लेना जरूरी है — जो कि वही समस्या है जिसे हम सुलझाना चाहते हैं। मार्कोव चेन उसी हिस्से को संभालती हैं।

Markov Chain Monte Carlo कैसे काम करता है

MCMC एक लूप है जिसमें हर कदम पर एक सरल निर्णय लिया जाता है।

  1. प्रारंभिक स्थिति से शुरू करें: अपने पैरामीटर स्पेस में एक शुरुआती बिंदु चुनें, भले ही वह एक मोटा अनुमान हो
  2. नई स्थिति प्रस्तावित करें: अगला कदम कहाँ लेना है, यह सुझाने के लिए एक प्रस्ताव तंत्र का उपयोग करें
  3. स्वीकार करना है या नहीं, तय करें: प्रस्तावित स्थिति की तुलना वर्तमान से करें और लक्षित वितरण के तहत उनकी प्रायिकताओं के आधार पर स्वीकार या अस्वीकार करें
  4. दोहराएँ: इस लूप को हज़ारों बार चलाएँ, और रास्ते में सैंपल एकत्र करें
  5. सैंपलों का उपयोग करें: एकत्र किए गए सैंपलों से माध्य, विश्वसनीय अंतराल (credible intervals), या कोई अन्य रुचिकर मात्रा का अनुमान लगाएँ

स्वीकार/अस्वीकार वाला कदम ही वह जगह है जहाँ “जादू” होता है।

बेहतर अवस्थाओं को बदतर की तुलना में अधिक बार स्वीकार करके, चेन उच्च-प्रायिकता वाले क्षेत्रों की ओर बढ़ती है — बिना पूरी डिस्ट्रीब्यूशन को गणना किए।

शुरुआती सैंपल आपके प्रारंभिक बिंदु पर निर्भर होते हैं, इसलिए उन्हें हटा दिया जाता है। पर्याप्त पुनरावृत्तियों के बाद, चेन अपनी शुरुआती स्थिति “भूल” जाती है और शेष सैंपल आपके लक्षित वितरण के वास्तविक आकार को दर्शाते हैं।

लक्षित वितरण और स्थिर वितरण

MCMC का उद्देश्य ऐसे लक्षित वितरण से सैंपल जनरेट करना है जिससे आप सीधे सैंपल नहीं ले सकते।

लक्षित वितरण वह होता है जिसके बारे में आप जानना चाहते हैं — बेयesian अनुमान में आमतौर पर पश्च वितरण। आप उसके आकार को एक नॉर्मलाइज़िंग कॉन्स्टेंट तक जानते हैं, लेकिन उस कॉन्स्टेंट को सीधे नहीं निकाल सकते। MCMC को उसकी जरूरत नहीं पड़ती।

हर MCMC एल्गोरिदम इस तरह बनाया जाता है कि उसकी मार्कोव चेन का स्थिर वितरण लक्षित वितरण से मेल खाए। स्थिर वितरण वह होता है जिसमें चेन पर्याप्त कदमों के बाद बस जाती है।

चेन को चलने दें और यह ऐसे सैंपल उत्पन्न करने लगेगी जो आपके लक्षित वितरण से निकाले गए ड्रॉ जैसे दिखते हैं। इंटीग्रल दरकिनार हो जाता है।

लोकप्रिय Markov Chain Monte Carlo एल्गोरिदम

व्यवहार में आपको कुछ प्रमुख MCMC एल्गोरिदम मिलेंगे। सभी एक ही मूल लूप का पालन करते हैं, लेकिन नई अवस्थाएँ प्रस्तावित करने और लक्षित वितरण की जानकारी का उपयोग करने में अलग होते हैं।

Metropolis एल्गोरिदम

Metropolis सबसे सरल MCMC एल्गोरिदम है और इसी ने इसकी शुरुआत की थी।

हर कदम पर यह वर्तमान स्थिति में रैंडम शोर जोड़कर नई स्थिति प्रस्तावित करता है। यदि प्रस्तावित स्थिति की लक्षित वितरण के तहत प्रायिकता अधिक है, तो उसे हमेशा स्वीकार किया जाता है। यदि कम है, तो उसे दोनों प्रायिकताओं के अनुपात के अनुरूप संभावना के साथ स्वीकार किया जाता है — अन्यथा चेन वहीं रहती है।

यह स्वीकार/अस्वीकार तंत्र चेन को उच्च-प्रायिकता क्षेत्रों में अधिक समय बिताने देता है, बिना पूरी डिस्ट्रीब्यूशन की गणना किए।

Metropolis एक सममित प्रस्ताव वितरण का उपयोग करता है, यानी किसी भी दिशा में कदम प्रस्तावित करने की संभावना समान होती है। मॉडल बड़े होने पर यह आमतौर पर टूटने लगता है।

Metropolis-Hastings एल्गोरिदम

Metropolis-Hastings (MH) एल्गोरिदम असममित प्रस्ताव वितरणों की अनुमति देकर Metropolis का सामान्यीकरण करता है।

MH स्वीकृति प्रायिकता को इस तथ्य के अनुसार समायोजित करता है कि कुछ प्रस्ताव अन्य की तुलना में अधिक संभावित होते हैं। आप प्रस्ताव को अपने लक्ष्य के आकार के अनुरूप ट्यून कर सकते हैं, जिससे बेहतर अन्वेषण और तेज़ अभिसरण मिलता है।

अधिकांश आधुनिक MCMC विधियाँ MH के विस्तार हैं या समान सिद्धांतों पर आधारित हैं। इसलिए यदि आप Metropolis-Hastings समझते हैं, तो आप इस क्षेत्र की नींव समझते हैं।

Gibbs सैंपलिंग

Gibbs सैंपलिंग सभी पैरामीटरों के लिए एक साथ नई स्थिति प्रस्तावित करने के बजाय एक समय में एक चर को अपडेट करता है।

हर कदम पर, यह प्रत्येक चर को उसकी सशर्त डिस्ट्रीब्यूशन से सैंपल करता है — यानी अन्य सभी के वर्तमान मानों को दिए गए उस चर की डिस्ट्रीब्यूशन। जब आप सभी चर से होकर गुजर लेते हैं, तो एक पूर्ण इटरेशन पूरा होता है।

यह स्वीकार/अस्वीकार चरण को पूरी तरह टाल देता है, क्योंकि हर सशर्त ड्रॉ हमेशा स्वीकार किया जाता है। तब उपयोगी है जब पूरा संयुक्त वितरण सैंपल करना कठिन हो पर सशर्त वितरण सहज हों — जो बेयesian पदानुक्रमित मॉडलों में आम है।

Hamiltonian Monte Carlo

Hamiltonian Monte Carlo (HMC) पहला एल्गोरिदम था जिसने बड़े पैमाने पर आधुनिक बेयesian अनुमान को व्यावहारिक बनाया।

यादृच्छिक रूप से नई अवस्थाएँ प्रस्तावित करने के बजाय, HMC लक्षित वितरण से मिलने वाली ग्रेडिएंट जानकारी का उपयोग करके ऐसी दूर स्थित अवस्थाएँ प्रस्तावित करता है जिनके स्वीकार होने की संभावना फिर भी अधिक होती है। यह पैरामीटर स्पेस में रैंडम-वॉक विधियों से कहीं बेहतर चलता है। अस्वीकार किए गए प्रस्ताव कम होते हैं और उच्च-आयामी वितरणों का बेहतर अन्वेषण होता है।

Metropolis जैसी रैंडम-वॉक विधियाँ पैरामीटरों की संख्या बढ़ने पर स्केल नहीं करतीं। HMC में यह समस्या उसी स्तर पर नहीं होती।

HMC, Stan के पीछे का इंजन है, जो सबसे व्यापक रूप से उपयोग किए जाने वाले प्रायिकतामूलक प्रोग्रामिंग प्लेटफॉर्म में से एक है। No-U-Turn Sampler (NUTS), जो PyMC में उपयोग किया जाने वाला HMC का एक अनुकूली विस्तार है, स्टेप साइज और स्टेपों की संख्या को मैनुअली ट्यून करने की जरूरत समाप्त कर देता है।

बेयesian आँकड़ों में Markov Chain Monte Carlo

यदि कोई एक क्षेत्र है जहाँ MCMC का सबसे बड़ा प्रभाव रहा है, तो वह बेयesian अनुमान है।

बेयesian आँकड़े पश्च वितरण पर केंद्रित होते हैं, जो डेटा देखने के बाद आपके मॉडल पैरामीटर की अद्यतन प्रायिकता है। इसकी गणना का मतलब है पूर्व को लाइकलिहुड से गुणा करना और फिर सामान्यीकृत करना। यह सामान्यीकरण चरण एक ऐसे इंटीग्रल की मांग करता है जो विरले ही सुलभ होता है।

MCMC इस चरण को पूरी तरह हटा देता है। आपको किसी भी बिंदु पर अननॉर्मलाइज़्ड पश्च का मान निकालना होता है और बाकी काम चेन कर देती है।

एक सरल उदाहरण देखें। मान लीजिए आप सिक्के के पक्षपात (bias) का अनुमान लगा रहे हैं। आप इस पूर्व धारणा से शुरू करते हैं कि सिक्का शायद निष्पक्ष है, और फिर उछालों का क्रम देखते हैं। सरल सिक्का मॉडल के लिए पश्च का क्लोज़्ड फॉर्म होता है। यदि आप एक पदानुक्रमित संरचना जोड़ दें — यानी सौ सिक्कों के पार एक साथ bias का अनुमान लगाना — तो गणना असंभव हो जाती है।

MCMC के साथ, आप चेन चलाते हैं, पश्च से सैंपल इकट्ठा करते हैं, और उन्हीं सैंपलों से जरूरत की गणनाएँ करते हैं।

Burn-In, Convergence, और Mixing समझना

ये तीनों अवधारणाएँ MCMC में नए डेटा वैज्ञानिकों को उलझा देती हैं। यदि आप इन्हें गलत समझते हैं, तो आपको परिणाम तो मिलेंगे, पर यह नहीं पता चलेगा कि वे अविश्वसनीय क्यों हैं।

Burn-in

जब एक मार्कोव चेन शुरू होती है, तो उसे यह अंदाज़ा नहीं होता कि आपके लक्षित वितरण के उच्च-प्रायिकता क्षेत्र कहाँ हैं।

शुरुआती सैंपल आपके शुरुआती बिंदु से प्रभावित होते हैं, न कि लक्ष्य वितरण से। Burn-in इन्हें हटाने का अभ्यास है। आप चेन को पहले कुछ इटरेशनों तक चलाते हैं, उन सैंपलों को फेंक देते हैं, और केवल उसके बाद के सैंपल रखते हैं, जब तक चेन को एक अच्छा शुरुआती क्षेत्र मिल न जाए।

Burn-in कितना लंबा होना चाहिए, इसके लिए कोई सार्वभौमिक नियम नहीं है। यह आपके मॉडल, शुरुआती बिंदु, और चेन के मिश्रण (mixing) पर निर्भर करता है। व्यवहार में, आप इसे फिक्स संख्या चुनने के बजाय ट्रेस प्लॉट्स से दृश्य रूप में जाँचते हैं।

Convergence (अभिसरण)

अभिसरण का मतलब है कि चेन पर अब शुरुआती बिंदु का प्रभाव नहीं रहा और वह अब लक्षित वितरण को दर्शाते हुए सैंपल निकाल रही है।

जो चेन अभिसरित नहीं हुई, वह पक्षपाती सैंपल देती है। उनसे निकाला गया माध्य वास्तविक पश्च माध्य से मेल नहीं खाएगा — बल्कि जहाँ चेन अटकी रही, उसे प्रतिबिंबित करेगा।

अभिसरण का आकलन आप बाद में डायग्नोस्टिक्स से करते हैं। अलग-अलग शुरुआती बिंदुओं से कई चेन चलाना और देखना कि क्या वे सहमत हैं, अभिसरण विफलताओं को पकड़ने का सबसे भरोसेमंद तरीका है।

Mixing (मिश्रण)

जो चेन अभिसरित हो जाती है लेकिन खराब मिलती-जुलती (mix) है, वह फिर भी समस्या है।

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

खराब मिश्रण अक्सर ऐसे ट्रेस प्लॉट में दिखता है जो किसी धीमी, टहलती नदी जैसा लगता है, न कि एक शोरयुक्त क्षैतिज बैंड जैसा। जब आप ऐसा देखें, तो आपके सैंपलर को ट्यूनिंग चाहिए — बेहतर प्रस्ताव वितरण या फिर बिल्कुल अलग एल्गोरिदम।

मिश्रण तुलना प्लॉट

मिश्रण तुलना प्लॉट

MCMC परिणामों का मूल्यांकन कैसे करें

अब मैं आपको MCMC के मूल्यांकन के चार तरीके दिखाऊँगा और बताऊँगा कि कब किसका उपयोग करें।

ट्रेस प्लॉट्स

ट्रेस प्लॉट हर इटरेशन पर किसी पैरामीटर के सैंपल मान को दिखाता है। MCMC चलाने के बाद यह पहली चीज है जिसे आपको देखना चाहिए।

एक स्वस्थ ट्रेस प्लॉट स्थिर माध्य के चारों ओर वाइट नॉइज़ जैसा दिखता है। आपको रुझान, लंबे सपाट हिस्से, या धीमा बहाव नहीं दिखना चाहिए। यदि चेन भटकती दिखे या एक ही क्षेत्र में कई इटरेशनों तक फँसी रहे, तो यह मिश्रण की समस्या है और आपके सैंपल भरोसेमंद नहीं हैं।

ट्रेस प्लॉट्स का दृश्य

ट्रेस प्लॉट्स का दृश्य

ऑटोकोरिलेशन

MCMC सैंपल कभी पूरी तरह स्वतंत्र नहीं होते। हर सैंपल अपने पूर्ववर्ती से प्रभावित होता है। ऑटोकोरिलेशन मापता है कि इटरेशनों में सैंपल कितने मज़बूती से सह-संबद्ध हैं।

उच्च ऑटोकोरिलेशन का मतलब है कि आपके सैंपलों में उनकी गिनती से कम जानकारी निहित है। दो हज़ार सह-संबद्ध सैंपल, दो सौ स्वतंत्र सैंपलों जितनी ही जानकारी दे सकते हैं। अधिकांश MCMC लाइब्रेरी ऑटोकोरिलेशन प्लॉट देती हैं ताकि आप देख सकें कि सैंपल जितना दूर होते जाते हैं, सह-संबंध कितनी जल्दी घटता है।

ऑटोकोरिलेशन प्लॉट्स का दृश्य

ऑटोकोरिलेशन प्लॉट्स का दृश्य

इफेक्टिव सैंपल साइज

इफेक्टिव सैंपल साइज (ESS) उसी ऑटोकोरिलेशन को एक व्यावहारिक संख्या में बदलता है: आपकी चेन कितने स्वतंत्र सैंपलों के बराबर है।

यदि आपने 5,000 सैंपल निकाले, लेकिन ESS 200 है, तो आप 200 स्वतंत्र ड्रॉ के सांख्यिकीय बल के साथ काम कर रहे हैं। कम ESS का मतलब है आपको चेन लंबी चलानी होगी, सैंपलर को ट्यून करना होगा, या दोनों। ज़्यादातर प्रैक्टिशनर भरोसेमंद अनुमाजनों के लिए प्रति पैरामीटर कम से कम कुछ सौ ESS का लक्ष्य रखते हैं।

अभिसरण डायग्नोस्टिक्स

जब आप कई चेन चलाते हैं, तो आप औपचारिक रूप से जाँच सकते हैं कि वे एक ही वितरण पर अभिसरित हुई हैं या नहीं। Gelman-Rubin डायग्नोस्टिक, जिसे R-hat के रूप में रिपोर्ट किया जाता है, हर चेन के भीतर के विचरण की तुलना चेन के बीच के विचरण से करता है।

R-hat का 1.0 के करीब होना दर्शाता है कि चेन एकमत हैं, जो अच्छा संकेत है। 1.01 या 1.05 से ऊपर के मान (आपकी लाइब्रेरी के थ्रेशहोल्ड पर निर्भर) बताते हैं कि चेन अभिसरित नहीं हुईं और आपको अधिक इटरेशन चाहिए। PyMC जैसी अधिकांश आधुनिक लाइब्रेरी स्वचालित रूप से R-hat निकालती हैं और अधिक होने पर चेतावनी देती हैं।

Python में Markov Chain Monte Carlo

Python में MCMC के लिए कुछ लाइब्रेरी हैं, और हर एक का अलग दर्शन है।

  • PyMC: अधिकांश डेटा वैज्ञानिकों के लिए सबसे सहज विकल्प। आप Python सिंटैक्स से अपना मॉडल परिभाषित करते हैं, और PyMC पर्दे के पीछे NUTS (HMC का अनुकूली संस्करण) का उपयोग कर सैंपलिंग संभालता है। Python में बेयesian मॉडलिंग के लिए यह गो-टू है।
  • CmdStanPy / PyStan: Stan के लिए Python इंटरफ़ेस, जो एक समर्पित प्रायिकतामूलक प्रोग्रामिंग भाषा है। Stan आपके मॉडल को रन करने से पहले C++ में कंपाइल करता है, जिससे यह तेज़ बनता है और जटिल पदानुक्रमित मॉडलों के लिए उपयुक्त। बदले में सीखने की वक्र अधिक तीखी है।
  • NumPy: समर्पित MCMC लाइब्रेरी नहीं, लेकिन आप Metropolis-Hastings जैसे एल्गोरिदम शुरू से लागू कर सकते हैं। उच्च-स्तरीय टूल पर जाने से पहले पर्दे के पीछे क्या होता है, यह समझने के लिए उपयोगी।

अधिकांश व्यावहारिक कार्यों के लिए, आप PyMC से शुरू करेंगे। मैं इसी का उपयोग करूँगा, तो यदि आप साथ चल रहे हैं, पहले लाइब्रेरी इंस्टॉल कर लें:

pip install pymc

सरलता बनाए रखने के लिए, मैं एक आसान उदाहरण पर रहूँगा — उछालों की श्रंखला से सिक्के के पक्षपात का अनुमान।

चरण 1: मॉडल परिभाषित करें

import pymc as pm
import numpy as np

# 1 = heads, 0 = tails
observed_flips = np.array([1, 0, 1, 1, 0, 1, 1, 1, 0, 1])

with pm.Model() as coin_model:
    # Prior: we believe the coin is probably fair
    bias = pm.Beta("bias", alpha=2, beta=2)

    # Likelihood: observed flips given the bias
    flips = pm.Bernoulli("flips", p=bias, observed=observed_flips)

pm.Beta प्रायर हल्की धारणा को इनकोड करता है कि सिक्का निष्पक्ष है। pm.Bernoulli लाइकलिहुड मॉडल को देखे गए डेटा से जोड़ता है।

चरण 2: सैंपलर चलाएँ

with coin_model:
    trace = pm.sample(2000, tune=1000, return_inferencedata=True)

सैंपलर चलाने का आउटपुट

सैंपलर चलाने का आउटपुट

tune बर्न-इन स्टेपों की संख्या सेट करता है — वे सैंपल हटा दिए जाते हैं। sample ट्यूनिंग के बाद प्रति चेन 2000 पश्च सैंपल खींचता है।

चरण 3: पश्च जाँचें

import arviz as az

az.plot_trace(trace, var_names=["bias"])
az.summary(trace, var_names=["bias"])

मॉडल ट्रेस प्लॉट और सारांश परिणाम

मॉडल ट्रेस प्लॉट और सारांश परिणाम

az.summary() हर पैरामीटर के लिए पश्च माध्य, मानक विचलन, और R-hat देता है। यदि R-hat 1.0 के पास है, तो चेन अभिसरित हैं। az.plot_trace() हर पैरामीटर के लिए ट्रेस और पश्च वितरण को साथ-साथ प्लॉट करता है।

इस डेटासेट — 10 उछालों में 7 हेड — के लिए पश्च माध्य 0.642 और मानक विचलन 0.124 आता है। यह डेटा के साक्ष्य को दर्शाता है, जबकि निष्पक्ष-सिक्का प्रायर के क़रीब भी रहता है। R-hat 1.00 है और ESS 2000 से काफी ऊपर, अतः चेन अभिसरित हैं और सैंपल भरोसेमंद हैं।

MCMC के साथ सामान्य गलतियाँ

MCMC चलाना आसान है, लेकिन इसका गलत उपयोग भी उतना ही आसान है। यहाँ सबसे आम गलतियाँ हैं।

  • जल्दी अभिसरण मान लेना: केवल इसलिए कि सैंपलर बिना त्रुटि के चला, इसका मतलब यह नहीं कि वह अभिसरित हो गया। परिणामों पर भरोसा करने से पहले हमेशा R-hat और ट्रेस प्लॉट्स जाँचें। चेन स्थिर दिख सकती है और फिर भी पैरामीटर स्पेस के एक क्षेत्र में अटकी रह सकती है।
  • बर्न-इन की अनदेखी: शुरुआती सैंपल आपके शुरुआती बिंदु की ओर पक्षपाती होते हैं, न कि लक्ष्य वितरण की ओर। उन्हें हटा दें। अधिकांश लाइब्रेरी इसे tune पैरामीटर के जरिए स्वतः संभालती हैं, लेकिन जाँच लें कि आप गलती से उन सैंपलों को अपने विश्लेषण में शामिल तो नहीं कर रहे।
  • खराब मिश्रण: बहुत धीमे चलने वाली चेन अत्यधिक सह-संबद्ध सैंपल देती है, जो उनकी गिनती से कम जानकारी रखते हैं। यदि आपका ट्रेस प्लॉट शोरयुक्त क्षैतिज बैंड के बजाय धीमे बहाव जैसा दिखता है, तो आपके प्रस्ताव वितरण को ट्यूनिंग चाहिए, या आपको बेहतर एल्गोरिदम चाहिए। Metropolis से NUTS पर स्विच करना अक्सर सीधे इसे ठीक कर देता है।
  • बहुत कम सैंपल: कम इफेक्टिव सैंपल साइज (ESS) का मतलब है कि आपके अनुमाजन अविश्वसनीय हैं, भले ही चेन तकनीकी रूप से अभिसरित हो। यदि आपका ESS आपके कुल ड्रॉ का छोटा अंश है, तो चेन लंबी चलाएँ या निष्कर्ष निकालने से पहले मिश्रण सुधारें।

MCMC बनाम अन्य सैंपलिंग विधियाँ

वितरण का अनुमाजन करने का यह एकमात्र तरीका नहीं है। यहाँ यह विकल्पों की तुलना में कैसा है।

  • Rejection sampling किसी सरल वितरण से प्रस्ताव लेता है और लक्ष्य से मेल के आधार पर स्वीकार करता है। जब यह काम करता है तो बिल्कुल सटीक है, लेकिन उच्च आयामों में स्वीकृति दर ध्वस्त हो जाती है।
  • Importance sampling प्रस्ताव वितरण से सैंपलों को वेट कर लक्ष्य के तहत अपेक्षाएँ अनुमानित करता है। यह तेज़ है और निम्न आयामों में अच्छा काम करता है, लेकिन आयाम बढ़ने पर वेट का विचरण फट जाता है। व्यवहार में, कुछ ही सैंपल लगभग सारा वेट ले लेते हैं, जिससे अनुमाजन अविश्वसनीय हो जाते हैं।
  • Variational inference (VI) एक सरल वितरण फिट करता है ताकि किसी डाइवर्जेंस को न्यूनतम करके लक्ष्य का अनुमाजन किया जा सके। VI MCMC से कहीं तेज़ है और बड़े डेटासेट तक स्केल करता है, लेकिन यह अनुमाजन त्रुटि लाता है। फिट किया गया वितरण वह पश्च संरचना छोड़ सकता है जिसे MCMC पकड़ लेता।

संक्षेप में:

MCMC बनाम विकल्प

MCMC बनाम विकल्प

जब गति से अधिक सटीकता मायने रखती हो, तब MCMC सही चुनाव है। यदि आपको बड़े डेटासेट तक स्केल करना हो या रीयल-टाइम में अनुमान चलाना हो, तो वैरिएशनल इंफ़रेंस सटीकता के बदले लेने लायक हो सकता है।

निष्कर्ष

MCMC उन औज़ारों में से एक है जो बाहर से डरावने लगते हैं, लेकिन यह समझते ही कि यह असल में क्या कर रहा है — ऐसे वितरण के आकार को दर्शाती सैंपलों की चेन बनाना जिसे आप सीधे नहीं गणना कर सकते — सब स्पष्ट हो जाता है।

इसे हिस्सों में बाँटें तो समझना और आसान हो जाता है: मार्कोव चेन और मोंटे कार्लो विधियाँ।

बेयesian आँकड़ों में इसकी भूमिका का महत्व बताना कठिन है। जो पश्च वितरण अन्यथा पहुंच से बाहर होते, वे विश्वसनीय सैंपलर मिलते ही सुलझने लगते हैं। इसी वजह से PyMC और Stan जैसे प्रायिकतामूलक प्रोग्रामिंग लाइब्रेरी के मूल में MCMC है।

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

यदि आप मशीन लर्निंग में दक्ष होना चाहते हैं, तो हमारे Machine Learning Scientist in Python ट्रैक में नामांकन करें। 85 घंटे की सामग्री आपको 2026 में नौकरी के लिए तैयार करेगी।

MCMC FAQs

Markov Chain Monte Carlo का उपयोग किस लिए किया जाता है?

MCMC का उपयोग उन प्रायिकता वितरणों से सैंपल खींचने के लिए किया जाता है जिनके साथ सीधे काम करना बहुत जटिल होता है। यह बेयesian आँकड़ों में सबसे आम है, जहाँ यह क्लोज़्ड-फॉर्म समाधान की जरूरत बिना पश्च वितरणों का अनुमान लगाता है। आप इसे भौतिकी सिमुलेशन, कम्प्यूटेशनल बायोलॉजी, और किसी भी ऐसे क्षेत्र में पाएँगे जहाँ सटीक अनुमान संभव नहीं।

MCMC साधारण रैंडम सैंपलिंग से कैसे अलग है?

साधारण रैंडम सैंपलिंग मानती है कि आप अपने लक्षित वितरण से सीधे ड्रॉ कर सकते हैं। MCMC इससे बचाव के लिए सैंपलों की एक चेन बनाता है जो धीरे-धीरे लक्ष्य पर अभिसरित होती है। आपको पूरे वितरण को जानने की जरूरत नहीं, बस किसी भी बिंदु पर उसका मान निकाल पाना चाहिए। समझौता यह है कि MCMC सैंपल सह-संबद्ध होते हैं, यानी भरोसेमंद अनुमाजन के लिए आपको अधिक सैंपल चाहिए।

आप कैसे जानेंगे कि कोई MCMC सैंपलर अभिसरित हो गया है?

सबसे आम जाँच Gelman-Rubin डायग्नोस्टिक है, जिसे R-hat के रूप में रिपोर्ट किया जाता है। 1.0 के करीब मान दर्शाते हैं कि चेन एक ही वितरण पर अभिसरित हो गई हैं। ट्रेस प्लॉट और इफेक्टिव सैंपल साइज (ESS) भी उपयोगी हैं। एक स्वस्थ ट्रेस प्लॉट स्थिर माध्य के चारों ओर रैंडम नॉइज़ जैसा दिखता है, और उच्च ESS का मतलब है कि आपके सैंपल आपके अनुमाजन पर भरोसा करने के लिए पर्याप्त जानकारी ले जाते हैं।

Metropolis-Hastings और Hamiltonian Monte Carlo में क्या अंतर है?

Metropolis-Hastings वर्तमान स्थिति में रैंडम शोर जोड़कर नई अवस्थाएँ प्रस्तावित करता है, जो तब धीमा हो सकता है जब लक्षित वितरण की ज्यामिति जटिल हो। Hamiltonian Monte Carlo ग्रेडिएंट जानकारी का उपयोग कर ऐसी अवस्थाएँ प्रस्तावित करता है जो वर्तमान स्थिति से दूर हों लेकिन स्वीकार होने की संभावना फिर भी अधिक हो, जिससे उच्च आयामों में कहीं बेहतर अन्वेषण होता है। अधिकांश आधुनिक बेयesian वर्कफ़्लो के लिए HMC — और उसका अनुकूली संस्करण, NUTS — पसंदीदा विकल्प है।

आपको MCMC के बजाय वैरिएशनल इंफ़रेंस कब उपयोग करना चाहिए?

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

विषय

DataCamp के साथ सीखें

Track

प्रबलन अधिगम में Python

12 घंटा
मजबूत करें reinforcement learning (RL) की बुनियादी समझ, ताकि आप ऐसे मॉडल बना सकें जो जटिल वास्तविक-विश्व परिवेशों में नेविगेट कर सकें और LLMs को प्रशिक्षित कर सकें।
विस्तृत जानकारी देखेंRight Arrow
कोर्स शुरू करें
और देखेंRight Arrow