Prawdopodobieństwo i twierdzenie Bayesa

Bayesowska analiza danych w Pythonie

Michal Oleszak

Machine Learning Engineer

Teoria prawdopodobieństwa

  • Wyrażenie niepewności.
  • Liczba z przedziału od 0 do 1.
    • P = 0   →   niemożliwe
    • P = 1   →   pewne
    • P = 0.5   →   szansa 50/50

 

  • P(deszcz jutro) = 0.75   →   75% szansy na deszcz jutro
Bayesowska analiza danych w Pythonie

Reguły prawdopodobieństwa

Reguła sumy

  • Prawdopodobieństwo A lub B (zdarzenia niezależne)
  • LUB = dodawanie
  • Prawdopodobieństwo wyrzucenia 2 lub 4 na kostce

P(2 lub 4) = 1/6 + 1/6 = 0,33333... = 33,3%

Reguła iloczynu

  • Prawdopodobieństwo A i B (zdarzenia niezależne)
  • I = mnożenie
  • Prawdopodobieństwo wyrzucenia 2, a potem 4 na kostce

P(2 i 4) = 1/6 * 1/6 = 0,02777... = 2,8%

Bayesowska analiza danych w Pythonie

Prawdopodobieństwo warunkowe

  • Prawdopodobieństwo zajścia zdarzenia, pod warunkiem że inne zdarzenie już zaszło.
  • P(A | B)

 

  • P(pomarańczowa) = 2/3   →   bezwarunkowe
  • P(niebieska) = 1/3   →   bezwarunkowe

 

  • P(niebieska | pomarańczowa) = 1/2   →   warunkowe
  • P(pomarańczowa | niebieska) = 1   →   warunkowe

Schematyczny rysunek trzech kulek w pudełku. Dwie są pomarańczowe, jedna niebieska.

Bayesowska analiza danych w Pythonie

Twierdzenie Bayesa

  • Metoda obliczania prawdopodobieństwa warunkowego na podstawie innych znanych prawdopodobieństw.

 

$$P(A|B) = \frac{P(B|A) * P(A)}{P(B)}$$

Bayesowska analiza danych w Pythonie

Twierdzenie Bayesa

  • Metoda obliczania prawdopodobieństwa warunkowego na podstawie innych znanych prawdopodobieństw.

 

$$P(\text{accident}|\text{slippery}) = \frac{P(\text{slippery}|\text{accident}) * P(\text{accident})}{P(\text{slippery})}$$

road_conditions.head()
     accident   slippery
0       False       True
1        True       True
2       False      False
3       False      False
4       False      False
Bayesowska analiza danych w Pythonie

Twierdzenie Bayesa w praktyce

 

$$P(\text{accident}|\text{slippery}) = \frac{P(\text{slippery}|\text{accident}) * P(\text{accident})}{P(\text{slippery})}$$

# Unconditional probability of an accident
p_accident = road_conditions["accident"].mean()  # 0.0625


# Unconditional probability of the road being slippery p_slippery = road_conditions["slippery"].mean() # 0.0892
# Probability of the road being slippery given there is an accident p_slippery_given_accident = road_conditions.loc[road_conditions["accident"]]["slippery"].mean() # 0.7142
# Probability of an accident given the road is slippery p_accident_given_slippery = p_slippery_given_accident * p_accident / p_slippery # 0.5
Bayesowska analiza danych w Pythonie

Czas na ćwiczenia!

Bayesowska analiza danych w Pythonie

Preparing Video For Download...