Wiedza a priori

Bayesowska analiza danych w Pythonie

Michal Oleszak

Machine Learning Engineer

Rozkład a priori

  • Rozkład a priori odzwierciedla wiedzę o parametrze przed obserwacją danych:
    • brak wiedzy   →   rozkład jednostajny (wszystkie wartości jednakowo prawdopodobne)
    • poprzedni rozkład a posteriori   →   można aktualizować nowymi danymi

 

  • Jako rozkład a priori można wybrać dowolny rozkład prawdopodobieństwa, aby uwzględnić zewnętrzne informacje:
    • opinia eksperta
    • wiedza powszechna
    • wcześniejsze badania
    • subiektywne przekonanie
Bayesowska analiza danych w Pythonie

Wpływ rozkładu a priori

Dwa nałożone wykresy gęstości: jeden dla rozkładu a priori (jednostajny), drugi dla rozkładu a posteriori (w kształcie dzwonu, nieco wyższy).

Dwa nałożone wykresy gęstości: jeden dla rozkładu a priori (jednostajny), drugi dla rozkładu a posteriori (w kształcie dzwonu, nieco wyższy, asymetryczny w prawo).

Dwa nałożone wykresy gęstości: jeden dla rozkładu a priori (jednostajny), drugi dla rozkładu a posteriori (w kształcie dzwonu, znacznie wyższy).

Dwa nałożone wykresy gęstości: jeden dla rozkładu a priori (jednostajny), drugi dla rozkładu a posteriori (w kształcie dzwonu, bardzo wysoki).

Bayesowska analiza danych w Pythonie

Rozkład a priori

  • Rozkład a priori wybieramy przed zapoznaniem się z danymi.
  • Wybór rozkładu a priori może wpływać na wyniki a posteriori (szczególnie przy małej ilości danych).
  • Aby uniknąć selektywnego doboru, wybór rozkładu a priori powinien być:
    • jasno określony,
    • uzasadniony: oparty na wcześniejszych badaniach, rozsądnych założeniach, opinii eksperta itp.
Bayesowska analiza danych w Pythonie

Wybór właściwego rozkładu a priori

Nasze przekonanie a priori: orzeł jest mało prawdopodobny

Wykres gęstości w kształcie dzwonu, asymetryczny w lewo, z wartością szczytową około 0,25.

Niektóre wybory są lepsze od innych!

 

Wykres gęstości w kształcie dzwonu, asymetryczny w lewo, z wartością szczytową około 0,25, nieznacznie węższy niż poprzedni.

Bayesowska analiza danych w Pythonie

Rozkłady sprzężone

  • Niektóre rozkłady a priori, po pomnożeniu przez określone wiarogodności, dają znane rozkłady a posteriori.
  • Nazywane są rozkładami sprzężonymi.
  • W przypadku rzutu monetą:
    • jeśli wybierzemy rozkład a priori Beta(a, b),
    • rozkład a posteriori to Beta(#orłów + a, #rzutów - #orłów + b)
  • Możemy próbkować z rozkładu a posteriori przy użyciu numpy.
  • get_heads_prob() z Rozdziału 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)
    
Bayesowska analiza danych w Pythonie

Dwa sposoby wyznaczania rozkładu a posteriori

Symulacja

  • Jeśli rozkład a posteriori jest znany, można z niego próbkować przy użyciu numpy:
    draws = np.random.beta(2, 4, 1000)
    
  • Wynik: tablica 1000 losowań z rozkładu a posteriori:
    array([0.05941031, ..., 0.70015975])
    
  • Wizualizacja za pomocą
    sns.kdeplot(draws)
    

Obliczenia

  • Jeśli rozkład a posteriori nie jest znany, można go wyznaczyć metodą aproksymacji siatką.
  • Wynik: prawdopodobieństwo a posteriori dla każdego elementu siatki:
           head_prob  posterior_prob
    0           0.00        0.009901
    1           0.01        0.003624
               ...           ...
    10199       0.99        0.003624
    10200       1.00        0.009901
    
  • Wizualizacja za pomocą
    sns.lineplot(df["head_prob"], df["posterior_prob"])
    
Bayesowska analiza danych w Pythonie

Czas na ćwiczenia z rozkładami a priori!

Bayesowska analiza danych w Pythonie

Preparing Video For Download...