Credința a priori

Analiza bayesiană a datelor în Python

Michal Oleszak

Machine Learning Engineer

Distribuția a priori

  • Distribuția a priori reflectă ceea ce știm despre parametru înainte de a observa date:
    • nimic   →   distribuție uniformă (toate valorile sunt la fel de probabile)
    • distribuția a posteriori anterioară   →   poate fi actualizată cu date noi

 

  • Se poate alege orice distribuție de probabilitate ca distribuție a priori pentru a include informații externe în model:
    • opinia experților
    • cunoștințe comune
    • cercetări anterioare
    • credințe subiective
Analiza bayesiană a datelor în Python

Impactul distribuției a priori

Două grafice de densitate suprapuse: unul pentru distribuția a priori, altul pentru distribuția a posteriori. Distribuția a priori este uniformă, cea a posteriori are formă de clopot, ușor mai înaltă.

Două grafice de densitate suprapuse: unul pentru distribuția a priori, altul pentru distribuția a posteriori. Distribuția a priori este uniformă, cea a posteriori are formă de clopot, ușor mai înaltă și înclinată la dreapta.

Două grafice de densitate suprapuse: unul pentru distribuția a priori, altul pentru distribuția a posteriori. Distribuția a priori este uniformă, cea a posteriori are formă de clopot, mult mai înaltă.

Două grafice de densitate suprapuse: unul pentru distribuția a priori, altul pentru distribuția a posteriori. Distribuția a priori este uniformă, cea a posteriori are formă de clopot, foarte înaltă.

Analiza bayesiană a datelor în Python

Distribuția a priori

  • Distribuția a priori este aleasă înainte de a observa datele.
  • Alegerea distribuției a priori poate influența rezultatele a posteriori (mai ales cu puține date).
  • Pentru a evita selecția subiectivă, alegerile distribuției a priori trebuie să fie:
    • clar formulate,
    • justificabile: bazate pe cercetări anterioare, ipoteze rezonabile, opinia experților etc.
Analiza bayesiană a datelor în Python

Alegerea distribuției a priori potrivite

Credința noastră a priori: capul este mai puțin probabil

Un grafic de densitate în formă de clopot, dar înclinat la stânga, cu vârful în jurul valorii 0,25.

Unele alegeri sunt mai bune decât altele!

 

Un grafic de densitate în formă de clopot, înclinat la stânga, cu vârful în jurul valorii 0,25, ușor mai îngust decât cel anterior.

Analiza bayesiană a datelor în Python

Distribuții a priori conjugate

  • Unele distribuții a priori, înmulțite cu anumite funcții de verosimilitate, produc distribuții a posteriori cunoscute.
  • Acestea sunt numite distribuții a priori conjugate.
  • În cazul aruncării monedei:
    • dacă alegem o distribuție a priori Beta(a, b),
    • atunci distribuția a posteriori este Beta(#capete + a, #aruncări - #capete + b)
  • Putem eșantiona din distribuția a posteriori folosind numpy.
  • get_heads_prob() din Capitolul 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)
    
Analiza bayesiană a datelor în Python

Două metode de obținere a distribuției a posteriori

Simulare

  • Dacă distribuția a posteriori este cunoscută, putem eșantiona din ea cu numpy:
    draws = np.random.beta(2, 4, 1000)
    
  • Rezultat: un array cu 1000 de eșantioane a posteriori:
    array([0.05941031, ..., 0.70015975])
    
  • Poate fi reprezentat grafic cu
    sns.kdeplot(draws)
    

Calcul

  • Dacă distribuția a posteriori nu este cunoscută, o putem calcula prin aproximare pe grilă.
  • Rezultat: probabilitatea a posteriori pentru fiecare element al grilei:
           head_prob  posterior_prob
    0           0.00        0.009901
    1           0.01        0.003624
               ...           ...
    10199       0.99        0.003624
    10200       1.00        0.009901
    
  • Poate fi reprezentat grafic cu
    sns.lineplot(df["head_prob"], df["posterior_prob"])
    
Analiza bayesiană a datelor în Python

Să exersăm cu distribuțiile a priori!

Analiza bayesiană a datelor în Python

Preparing Video For Download...