Bayesyen motorun altında

Python ile Bayesçi Veri Analizi

Michal Oleszak

Machine Learning Engineer

Bayes Teoremi: tekrar

 

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

Python ile Bayesçi Veri Analizi

Bayes Teoremi: tekrar

 

$$P(\text{parametreler}|\text{veri}) = \frac{P(\text{veri}|\text{parametreler}) * P(\text{parametreler})}{P(\text{veri})}$$

 

  • P(parametreler | veri)   →   art dağılımı: veriyi gördükten sonra parametreler hakkında bildiklerimiz
  • P(parametreler)   →   öncül dağılım: veri görmeden önce parametreler hakkında bildiklerimiz
  • P(veri | parametreler)   →   istatistiksel modelimize göre verinin olikliği
  • P(veri)   →   ölçekleme katsayısı
Python ile Bayesçi Veri Analizi

Parayı tekrar atmak: ızgara yaklaşımı

S: 100 yazı-turada 75 yazı geldiyse, paranın yazı gelme olasılığı nedir?

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 satır x 2 sütun]
Python ile Bayesçi Veri Analizi

Parayı tekrar atmak: ızgara yaklaşımı

S: 100 yazı-turada 75 yazı geldiyse, paranın yazı gelme olasılığı nedir?

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 satır x 2 sütun]
Python ile Bayesçi Veri Analizi

Parayı tekrar atmak: ızgara yaklaşımı

S: 100 yazı-turada 75 yazı geldiyse, paranın yazı gelme olasılığı nedir?

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 satır x 3 sütun]
Python ile Bayesçi Veri Analizi

Parayı tekrar atmak: ızgara yaklaşımı

S: 100 yazı-turada 75 yazı geldiyse, paranın yazı gelme olasılığı nedir?

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 satır x 3 sütun]
Python ile Bayesçi Veri Analizi

Parayı tekrar atmak: ızgara yaklaşımı

S: 100 yazı-turada 75 yazı geldiyse, paranın yazı gelme olasılığı nedir?

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 satır x 4 sütun]
Python ile Bayesçi Veri Analizi

Parayı tekrar atmak: ızgara yaklaşımı

S: 100 yazı-turada 75 yazı geldiyse, paranın yazı gelme olasılığı nedir?

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 satır x 4 sütun]
Python ile Bayesçi Veri Analizi

Parayı tekrar atmak: ızgara yaklaşımı

S: 100 yazı-turada 75 yazı geldiyse, paranın yazı gelme olasılığı nedir?

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 satır x 5 sütun]
Python ile Bayesçi Veri Analizi

Parayı tekrar atmak: ızgara yaklaşımı

S: 100 yazı-turada 75 yazı geldiyse, paranın yazı gelme olasılığı nedir?

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 ile Bayesçi Veri Analizi

Art dağılımını görselleştirme

S: 100 yazı-turada 75 yazı geldiyse, paranın yazı gelme olasılığı nedir?

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 satır x 5 sütun]
sns.lineplot(heads75["head_prob"], heads75["posterior_prob"])
plt.show()
Python ile Bayesçi Veri Analizi

Art dağılımını görselleştirme

S: 100 yazı-turada 75 yazı geldiyse, paranın yazı gelme olasılığı nedir? C:

Yazı gelme olasılığı için bir olasılık yoğunluk grafiği. Tepe noktası ~0.75 civarında; yaklaşık 0.60–0.85 arasında değerlere izin verir.

Python ile Bayesçi Veri Analizi

Izgara yaklaşımıyla artları hesaplayalım!

Python ile Bayesçi Veri Analizi

Preparing Video For Download...