Voorafgaande overtuiging

Bayesian Data Analysis in Python

Michal Oleszak

Machine Learning Engineer

Priorverdeling

  • De prior verdeelt wat we weten over de parameter vóórdat we data zien:
    • niets → uniforme verdeling (alle waarden even waarschijnlijk)
    • oude posterior → kan worden geüpdatet met nieuwe data

 

  • Je kunt elke kansverdeling als prior kiezen om externe info toe te voegen:
    • expert opinion
    • algemene kennis
    • eerder onderzoek
    • subjectieve overtuiging
Bayesian Data Analysis in Python

Invloed van de prior

Twee dichtheidsplots over elkaar, één voor de priorverdeling en één voor de posterior. De prior is uniform, de posterior is klokvormig en iets hoger.

Twee dichtheidsplots over elkaar, één voor de priorverdeling en één voor de posterior. De prior is uniform, de posterior is klokvormig, iets hoger en naar rechts scheef.

Twee dichtheidsplots over elkaar, één voor de priorverdeling en één voor de posterior. De prior is uniform, de posterior is klokvormig en veel hoger.

Twee dichtheidsplots over elkaar, één voor de priorverdeling en één voor de posterior. De prior is uniform, de posterior is klokvormig en veel hoger.

Bayesian Data Analysis in Python

Priorverdeling

  • Priorverdeling kies je vóórdat je de data ziet.
  • De keuze van de prior kan de posterior beïnvloeden (zeker bij weinig data).
  • Om cherry-picking te vermijden, moet de prior:
    • duidelijk vermeld worden,
    • uitlegbaar zijn: gebaseerd op eerder onderzoek, redelijke aannames, expert opinion, enz.
Bayesian Data Analysis in Python

De juiste prior kiezen

Onze prior: kop is minder waarschijnlijk

Een klokvormige, maar naar links scheve dichtheidsplot, met een piek rond 0,25.

Sommige keuzes zijn beter dan andere!

 

Een klokvormige, maar naar links scheve dichtheidsplot, met een piek rond 0,25, iets smaller dan de vorige plot.

Bayesian Data Analysis in Python

Conjugate priors

  • Sommige priors, vermenigvuldigd met specifieke likelihoods, geven bekende posteriors.
  • Dat zijn conjugate priors.
  • Voor muntworpen:
    • kies prior Beta(a, b),
    • dan is de posterior Beta(#koppen + a, #worpen - #koppen + b)
  • We kunnen uit de posterior samplen met numpy.
  • get_heads_prob() uit Hoofdstuk 1:
    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)
    
Bayesian Data Analysis in Python

Twee manieren om de posterior te krijgen

Simulatie

  • Als de posterior bekend is, kunnen we eruit samplen met numpy:
    draws = np.random.beta(2, 4, 1000)
    
  • Resultaat: een array met 1000 posterior-trekkingen:
    array([0.05941031, ..., 0.70015975])
    
  • Kan geplot worden met
    sns.kdeplot(draws)
    

Berekening

  • Als de posterior niet bekend is, kun je die berekenen met grid-approximatie.
  • Resultaat: posterior-kans per grid-element:
           head_prob  posterior_prob
    0           0.00        0.009901
    1           0.01        0.003624
               ...           ...
    10199       0.99        0.003624
    10200       1.00        0.009901
    
  • Kan geplot worden met
    sns.lineplot(df["head_prob"], df["posterior_prob"])
    
Bayesian Data Analysis in Python

Laten we oefenen met priors!

Bayesian Data Analysis in Python

Preparing Video For Download...