बेयज़ियन के अंदर क्या चल रहा है

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

Michal Oleszak

Machine Learning Engineer

Bayes' Theorem दोबारा

 

$$P(A|B) = \frac{P(B|A) * P(A)}{P(B)}$$

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

Bayes' Theorem दोबारा

 

$$P(\text{parameters}|\text{data}) = \frac{P(\text{data}|\text{parameters}) * P(\text{parameters})}{P(\text{data})}$$

 

  • P(parameters | data)   →   posterior distribution: डेटा देखने के बाद पैरामीटर्स के बारे में हमारी जानकारी
  • P(parameters)   →   prior distribution: कोई डेटा देखने से पहले पैरामीटर्स के बारे में हमारी जानकारी
  • P(data | parameters)   →   हमारे सांख्यिकीय मॉडल के अनुसार डेटा की likelihood
  • P(data)   →   स्केलिंग फ़ैक्टर
Python में Bayesian डेटा विश्लेषण

फिर से सिक्का उछालें: ग्रिड एप्रॉक्सिमेशन

प्रश्न: अगर 100 उछाल में 75 हेड्स आए, तो सिक्के पर हेड्स आने की प्रायिकता क्या है?

num_heads = np.arange(0, 101, 1)
head_prob = np.arange(0, 1.01, 0.01)

coin = pd.DataFrame([(x, y) for x in num_heads for y in head_prob]) coin.columns = ["num_heads", "head_prob"]
       num_heads  head_prob
0              0       0.00
1              0       0.01
2              0       0.02
          ...        ...
10199        100       0.99
10200        100       1.00
[10201 rows x 2 columns]
Python में Bayesian डेटा विश्लेषण

फिर से सिक्का उछालें: ग्रिड एप्रॉक्सिमेशन

प्रश्न: अगर 100 उछाल में 75 हेड्स आए, तो सिक्के पर हेड्स आने की प्रायिकता क्या है?

from scipy.stats import uniform
coin["prior"] = uniform.pdf(coin["head_prob"])

       num_heads  head_prob
0              0       0.00
1              0       0.01
2              0       0.02
          ...        ...
10199        100       0.99
10200        100       1.00
[10201 rows x 2 columns]
Python में Bayesian डेटा विश्लेषण

फिर से सिक्का उछालें: ग्रिड एप्रॉक्सिमेशन

प्रश्न: अगर 100 उछाल में 75 हेड्स आए, तो सिक्के पर हेड्स आने की प्रायिकता क्या है?

from scipy.stats import uniform
coin["prior"] = uniform.pdf(coin["head_prob"])

       num_heads  head_prob  prior
0              0       0.00    1.0
1              0       0.01    1.0
2              0       0.02    1.0
          ...        ...    ...
10199        100       0.99    1.0
10200        100       1.00    1.0
[10201 rows x 3 columns]
Python में Bayesian डेटा विश्लेषण

फिर से सिक्का उछालें: ग्रिड एप्रॉक्सिमेशन

प्रश्न: अगर 100 उछाल में 75 हेड्स आए, तो सिक्के पर हेड्स आने की प्रायिकता क्या है?

from scipy.stats import uniform
coin["prior"] = uniform.pdf(coin["head_prob"])

from scipy.stats import binom coin["likelihood"] = binom.pmf(coin["num_heads"], 100, coin["head_prob"])
       num_heads  head_prob  prior
0              0       0.00    1.0
1              0       0.01    1.0
2              0       0.02    1.0
          ...        ...    ...
10199        100       0.99    1.0
10200        100       1.00    1.0
[10201 rows x 3 columns]
Python में Bayesian डेटा विश्लेषण

फिर से सिक्का उछालें: ग्रिड एप्रॉक्सिमेशन

प्रश्न: अगर 100 उछाल में 75 हेड्स आए, तो सिक्के पर हेड्स आने की प्रायिकता क्या है?

from scipy.stats import uniform
coin["prior"] = uniform.pdf(coin["head_prob"])

from scipy.stats import binom coin["likelihood"] = binom.pmf(coin["num_heads"], 100, coin["head_prob"])
       num_heads  head_prob  prior  likelihood
0              0       0.00    1.0    1.000000
1              0       0.01    1.0    0.366032
2              0       0.02    1.0    0.132620
          ...        ...    ...         ...
10199        100       0.99    1.0    0.366032
10200        100       1.00    1.0    1.000000
[10201 rows x 4 columns]
Python में Bayesian डेटा विश्लेषण

फिर से सिक्का उछालें: ग्रिड एप्रॉक्सिमेशन

प्रश्न: अगर 100 उछाल में 75 हेड्स आए, तो सिक्के पर हेड्स आने की प्रायिकता क्या है?

coin["posterior_prob"] = coin["prior"] * coin["likelihood"]
coin["posterior_prob"] /= coin["posterior_prob"].sum()


       num_heads  head_prob  prior  likelihood
0              0       0.00    1.0    1.000000
1              0       0.01    1.0    0.366032
2              0       0.02    1.0    0.132620
          ...        ...    ...         ...
10199        100       0.99    1.0    0.366032
10200        100       1.00    1.0    1.000000
[10201 rows x 4 columns]
Python में Bayesian डेटा विश्लेषण

फिर से सिक्का उछालें: ग्रिड एप्रॉक्सिमेशन

прश्न: अगर 100 उछाल में 75 हेड्स आए, तो सिक्के पर हेड्स आने की प्रायिकता क्या है?

coin["posterior_prob"] = coin["prior"] * coin["likelihood"]
coin["posterior_prob"] /= coin["posterior_prob"].sum()


       num_heads  head_prob  prior  likelihood  posterior_prob
0              0       0.00    1.0    1.000000        0.009901
1              0       0.01    1.0    0.366032        0.003624
2              0       0.02    1.0    0.132620        0.001313
          ...        ...    ...         ...             ...
10199        100       0.99    1.0    0.366032        0.003624
10200        100       1.00    1.0    1.000000        0.009901
[10201 rows x 5 columns]
Python में Bayesian डेटा विश्लेषण

फिर से सिक्का उछालें: ग्रिड एप्रॉक्सिमेशन

प्रश्न: अगर 100 उछाल में 75 हेड्स आए, तो सिक्के पर हेड्स आने की प्रायिकता क्या है?

from scipy.stats import binom
from scipy.stats import uniform

num_heads = np.arange(0, 101, 1)
head_prob = np.arange(0, 1.01, 0.01)
coin = pd.DataFrame([(x, y) for x in num_heads for y in head_prob])
coin.columns = ["num_heads", "head_prob"]

coin["prior"] = uniform.pdf(coin["head_prob"])
coin["likelihood"] = binom.pmf(coin["num_heads"], 100, coin["head_prob"])

coin["posterior_prob"] = coin["prior"] * coin["likelihood"]
coin["posterior_prob"] /= coin["posterior_prob"].sum()
Python में Bayesian डेटा विश्लेषण

पोस्टेरियर वितरण प्लॉट करना

प्रश्न: अगर 100 उछाल में 75 हेड्स आए, तो सिक्के पर हेड्स आने की प्रायिकता क्या है?

heads75 = coin.loc[coin["num_heads"] == 75]
heads75["posterior_prob"] /= heads75["posterior_prob"].sum()
      num_heads  head_prob  prior     likelihood  posterior_prob
7575         75       0.00    1.0   0.000000e+00    0.000000e+00
7576         75       0.01    1.0  1.886367e-127   1.867690e-129
         ...        ...    ...            ...             ...
7674         75       0.99    1.0   1.141263e-27    1.129964e-29
7675         75       1.00    1.0   0.000000e+00    0.000000e+00
[101 rows x 5 columns]
sns.lineplot(heads75["head_prob"], heads75["posterior_prob"])
plt.show()
Python में Bayesian डेटा विश्लेषण

पोस्टेरियर वितरण प्लॉट करना

प्रश्न: अगर 100 उछाल में 75 हेड्स आए, तो सिक्के पर हेड्स आने की प्रायिकता क्या है? उत्तर:

हेड्स की प्रायिकता के लिए डेंसिटी प्लॉट. प्लॉट लगभग 0.75 पर पीक करता है और लगभग 0.60 से 0.85 के बीच मानों की अनुमति देता है.

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

आइए ग्रिड एप्रॉक्सिमेशन से पोस्टेरियर निकालने का अभ्यास करें!

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

Preparing Video For Download...