पूर्व मान्यता

Python में Bayesian डेटा विश्लेषण

Michal Oleszak

Machine Learning Engineer

Prior distribution

  • Prior distribution बताता है कि बिना डेटा देखे पैरामीटर के बारे में हमारी जानकारी क्या है:
    • कुछ नहीं   →   uniform distribution (सभी मान समान रूप से संभव)
    • पुराना posterior   →   नए डेटा से अपडेट हो सकता है

 

  • मॉडल में बाहरी जानकारी जोड़ने के लिए कोई भी prior चुन सकते हैं:
    • विशेषज्ञ की राय
    • सामान्य जानकारी
    • पूर्व शोध
    • व्यक्तिपरक मान्यता
Python में Bayesian डेटा विश्लेषण

Prior का प्रभाव

दो ओवरलेड डेंसिटी प्लॉट: एक prior distribution का, दूसरा posterior का। Prior uniform है; posterior घंटी-आकार का, थोड़ा ऊँचा।

दो ओवरलेड डेंसिटी प्लॉट: एक prior distribution का, दूसरा posterior का। Prior uniform है; posterior घंटी-आकार का, थोड़ा ऊँचा और दाईं ओर skewed।

दो ओवरलेड डेंसिटी प्लॉट: एक prior distribution का, दूसरा posterior का। Prior uniform है; posterior घंटी-आकार का, काफी ऊँचा।

दो ओवरलेड डेंसिटी प्लॉट: एक prior distribution का, दूसरा posterior का। Prior uniform है; posterior घंटी-आकार का, बहुत अधिक ऊँचा।

Python में Bayesian डेटा विश्लेषण

Prior distribution

  • Prior distribution डेटा देखने से पहले चुना जाता है।
  • Prior का चुनाव posterior को प्रभावित कर सकता है (खासकर जब डेटा कम हो)।
  • Cherry-picking से बचने के लिए, prior के चुनाव:
    • साफ़-साफ़ बताए जाएँ,
    • समझाने योग्य हों: पूर्व शोध, उचित मान्यताओं, विशेषज्ञ राय आदि पर आधारित।
Python में Bayesian डेटा विश्लेषण

सही prior चुनना

हमारी prior मान्यता: हेड्स कम संभव

घंटी-आकार का, बाईं ओर skewed डेंसिटी प्लॉट, लगभग 0.25 पर शिखर।

कुछ चुनाव दूसरों से बेहतर होते हैं!

 

घंटी-आकार का, बाईं ओर skewed डेंसिटी प्लॉट, लगभग 0.25 पर शिखर, पिछले प्लॉट से थोड़ा सँकरा।

Python में Bayesian डेटा विश्लेषण

Conjugate priors

  • कुछ priors, खास likelihoods से मिलकर, ज्ञात posteriors देते हैं।
  • इन्हें conjugate priors कहते हैं।
  • सिक्का उछालने के मामले में:
    • यदि हम prior Beta(a, b) लें,
    • तो posterior होगा Beta(#heads + a, #tosses - #heads + b)
  • हम numpy से posterior से सैंपल ले सकते हैं।
  • Chapter 1 का get_heads_prob():
    def get_heads_prob(tosses):
      num_heads = np.sum(tosses)
      # prior: Beta(1,1)
      return np.random.beta(num_heads + 1, len(tosses) - num_heads + 1, 1000)
    
Python में Bayesian डेटा विश्लेषण

Posterior पाने के दो तरीके

सिमुलेशन

  • यदि posterior ज्ञात हो, तो numpy से उससे सैंपल ले सकते हैं:
    draws = np.random.beta(2, 4, 1000)
    
  • परिणाम: 1000 posterior draws की एक array:
    array([0.05941031, ..., 0.70015975])
    
  • इस प्लॉट को बना सकते हैं
    sns.kdeplot(draws)
    

कैल्क्युलेशन

  • यदि posterior ज्ञात न हो, तो grid approximation से गणना कर सकते हैं।
  • परिणाम: हर grid एलिमेंट के लिए posterior probability:
           head_prob  posterior_prob
    0           0.00        0.009901
    1           0.01        0.003624
               ...           ...
    10199       0.99        0.003624
    10200       1.00        0.009901
    
  • इस प्लॉट को बना सकते हैं
    sns.lineplot(df["head_prob"], df["posterior_prob"])
    
Python में Bayesian डेटा विश्लेषण

आइए priors के साथ अभ्यास करें!

Python में Bayesian डेटा विश्लेषण

Preparing Video For Download...