Prior belief

Bayesiansk dataanalys i Python

Michal Oleszak

Machine Learning Engineer

Priori-fördelning

  • Priori-fördelningen speglar vad vi vet om parametern innan vi ser data:
    • ingenting   →   likformig fördelning (alla värden lika sannolika)
    • gammal posteriori   →   kan uppdateras med ny data

 

  • Man kan välja vilken sannolikhetsfördelning som helst som priori för att inkludera extern information i modellen:
    • expertbedömning
    • allmän kännedom
    • tidigare forskning
    • subjektiv uppfattning
Bayesiansk dataanalys i Python

Prioris påverkan

Två täthetskurvor överlagda, en för priori-fördelningen och en för posteriori. Priori är likformig, posteriori är klockformad och något högre.

Två täthetskurvor överlagda, en för priori-fördelningen och en för posteriori. Priori är likformig, posteriori är klockformad, något högre och snedfördelad åt höger.

Två täthetskurvor överlagda, en för priori-fördelningen och en för posteriori. Priori är likformig, posteriori är klockformad och betydligt högre.

Två täthetskurvor överlagda, en för priori-fördelningen och en för posteriori. Priori är likformig, posteriori är klockformad och mycket högre.

Bayesiansk dataanalys i Python

Priori-fördelning

  • Priori-fördelningen väljs innan vi ser data.
  • Valet av priori kan påverka posteriori-resultaten (särskilt med lite data).
  • För att undvika selektivt urval bör priorivalet:
    • anges tydligt,
    • kunna motiveras: baserat på tidigare forskning, rimliga antaganden, expertbedömning osv.
Bayesiansk dataanalys i Python

Att välja rätt priori

Vår priori-uppfattning: krona är mindre sannolik

En klockformad men vänstersnedfördelad täthetskurva med topp kring 0,25.

Vissa val är bättre än andra!

 

En klockformad men vänstersnedfördelad täthetskurva med topp kring 0,25, något smalare än föregående kurva.

Bayesiansk dataanalys i Python

Konjugerade priorier

  • Vissa priorier ger, multiplicerade med specifika sannolikhetsfunktioner, kända posteriori-fördelningar.
  • De kallas konjugerade priorier.
  • Vid myntsingling:
    • om vi väljer priori Beta(a, b),
    • är posteriori Beta(#krona + a, #kast - #krona + b)
  • Vi kan sampla från posteriori med numpy.
  • get_heads_prob() från kapitel 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)
    
Bayesiansk dataanalys i Python

Två sätt att beräkna posteriori

Simulering

  • Om posteriori är känd kan vi sampla från den med numpy:
    draws = np.random.beta(2, 4, 1000)
    
  • Resultat: en array med 1 000 posteriori-samplingar:
    array([0.05941031, ..., 0.70015975])
    
  • Kan visualiseras med
    sns.kdeplot(draws)
    

Beräkning

  • Om posteriori är okänd kan vi beräkna den med gridapproximation.
  • Resultat: posteriori-sannolikhet för varje gridelement:
           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 visualiseras med
    sns.lineplot(df["head_prob"], df["posterior_prob"])
    
Bayesiansk dataanalys i Python

Nu kör vi en övning!

Bayesiansk dataanalys i Python

Preparing Video For Download...