Markov Chain Monte Carlo i dopasowywanie modeli

Bayesowska analiza danych w Pythonie

Michal Oleszak

Machine Learning Engineer

Bayesowska analiza danych w praktyce

  • Aproksymacja siatkowa: niepraktyczna przy wielu parametrach
  • Próbkowanie ze znanego rozkładu a posteriori: wymaga sprzężonych priorytetów
  • Markov Chain Monte Carlo (MCMC): próbkowanie z nieznanego rozkładu a posteriori!
Bayesowska analiza danych w Pythonie

Monte Carlo

  • Aproksymacja wielkości przez generowanie liczb losowych
  • Ze wzoru: $\pi r^2 \simeq 78.5$

Koło o promieniu 5.

Bayesowska analiza danych w Pythonie

Monte Carlo

  • Aproksymacja wielkości przez generowanie liczb losowych
  • Ze wzoru: $\pi r^2 \simeq 78.5$
  • Narysuj kwadrat 10x10 wokół koła.

Koło o promieniu 5 z zaznaczonym kwadratem.

Bayesowska analiza danych w Pythonie

Monte Carlo

  • Aproksymacja wielkości przez generowanie liczb losowych
  • Ze wzoru: $\pi r^2 \simeq 78.5$
  • Narysuj kwadrat 10x10 wokół koła.
  • Wylosuj 25 punktów w kwadracie.
  • Ile jest wewnątrz koła? $19/25=76\%$
  • Przybliżone pole koła: 76% * 100 = 76

Koło o promieniu 5 z zaznaczonym kwadratem i 25 losowo rozmieszczonymi punktami.

Bayesowska analiza danych w Pythonie

Łańcuchy Markowa

  • Modeluje sekwencję stanów, między którymi przechodzi się z określonym prawdopodobieństwem.
Bayesowska analiza danych w Pythonie

Łańcuchy Markowa

  • Modeluje sekwencję stanów, między którymi przechodzi się z określonym prawdopodobieństwem.

Co niedźwiedź zrobi dalej:

polować jeść spać
polować 0.1 0.8 0.1
jeść 0.05 0.4 0.55
spać 0.8 0.15 0.05
  • Po wielu krokach prawdopodobieństwa przejść stają się takie same niezależnie od stanu początkowego.
Bayesowska analiza danych w Pythonie

Łańcuchy Markowa

  • Modeluje sekwencję stanów, między którymi przechodzi się z określonym prawdopodobieństwem.

Co niedźwiedź zrobi dalej:

polować jeść spać
polować 0.1 0.8 0.1
jeść 0.05 0.4 0.55
spać 0.8 0.15 0.05
  • Po wielu krokach prawdopodobieństwa przejść stają się takie same niezależnie od stanu początkowego.

Co niedźwiedź zrobi w dalekiej przyszłości:

polować jeść spać
polować 0.28 0.44 0.28
jeść 0.28 0.44 0.28
spać 0.28 0.44 0.28
Bayesowska analiza danych w Pythonie

Markov Chain Monte Carlo

Pojedyncza czerwona kropka na osi numerycznej.

Bayesowska analiza danych w Pythonie

Markov Chain Monte Carlo

Dwie kropki na osi numerycznej: czerwona i czarna.

Bayesowska analiza danych w Pythonie

Markov Chain Monte Carlo

Dwie kropki na osi numerycznej: czerwona i zielona.

Bayesowska analiza danych w Pythonie

Markov Chain Monte Carlo

Trzy kropki na osi numerycznej: czerwona, zielona i czarna.

Bayesowska analiza danych w Pythonie

Markov Chain Monte Carlo

Trzy kropki na osi numerycznej: dwie czerwone i jedna zielona.

Bayesowska analiza danych w Pythonie

Markov Chain Monte Carlo

Cztery kropki na osi numerycznej: dwie czerwone i dwie zielone.

Bayesowska analiza danych w Pythonie

Markov Chain Monte Carlo

Siedem kropek na osi numerycznej: dwie czerwone i pięć zielonych.

Bayesowska analiza danych w Pythonie

Markov Chain Monte Carlo

Wiele kropek na osi numerycznej: część czerwonych, większość zielonych.

Bayesowska analiza danych w Pythonie

Zagregowane dane reklamowe

print(ads_aggregated)
           date  clothes_banners_shown  sneakers_banners_shown  num_clicks
0    2019-01-01                     20                      18           2
1    2019-01-02                     24                      19           8
2    2019-01-03                     20                      20           5
..          ...                    ...                     ...         ...
148  2019-05-29                     24                      25           8
149  2019-05-30                     26                      27          11
150  2019-05-31                     26                      24           8

[151 rows x 4 columns]
Bayesowska analiza danych w Pythonie

Regresja liniowa z pyMC3

formula = "num_clicks ~ clothes_banners_shown + sneakers_banners_shown"


with pm.Model() as model: pm.GLM.from_formula(formula, data=ads_aggregated)
# Print model specification print(model)
# Sample posterior draws trace = pm.sample(draws=1000, tune=500)

Wynik funkcji print z pymc3, zawierający listę priorytetów parametrów modelu.

Bayesowska analiza danych w Pythonie

Ćwiczmy MCMC!

Bayesowska analiza danych w Pythonie

Preparing Video For Download...