import math as mBeta distribution
fastai
Beta distribution
When trying to to Bayesian interference to estimate probability, we can use Beta distribution as a prior. Below are some steps to calculate it.
From the Data Science from Scratch book.
$ f(x, , ) = x^{- 1} (1 - x)^{- 1} {(, )} $
where
$ = () () {(+ )} $
where
\(\Gamma(n)\) is the Gamma function which, for positive integers is
$ (n) = (n - 1)!$
def B(alpha: float, beta: float) -> float:
"This scales the parameters between 0 and 1"
return m.gamma(alpha) * m.gamma(beta) / m.gamma(alpha + beta)def beta_pdf(x: float, alpha: float, beta:float) -> float:
if x <= 0 or x >=1: return 0
return x ** (alpha - 1) * (1 - x) ** (beta - 1) / B(alpha, beta)import numpy as np
import pandas as pd
import altair as altdf = pd.DataFrame()
Beta_combinations = [(1, 1), (10, 10), (4, 16), (16, 4), (30, 30)]
for Beta in Beta_combinations:
alpha, beta = Beta
df_B = pd.DataFrame()
df_B['x'] = pd.Series(np.arange(0.01, 1, .01))
df_B['y'] = df_B['x'].apply(lambda x: beta_pdf(x, alpha, beta))
df_B['Beta'] = f'({alpha}, {beta})'
df = pd.concat([df, df_B])The distribution centers around $ {+ } $
- Beta(1, 1) is the uniform distribution in [1, 1]
- When alpha is greater than beta the distribution is skewed to the left (and respectively, in the opposite case)
- The greater alpha and beta are the ‘tighter’ is the distribution
alt.Chart(df).mark_line().encode(alt.X('x:Q'), alt.Y('y:Q'), alt.Color('Beta'), tooltip=['x', 'y', 'Beta'], strokeDash='Beta').properties(width=600)