Przejdź do treści
coden

Sieci bayesowskie: dlaczego trawa jest mokra i co z tego wynika dla zraszacza

Rozkład łączny i jego faktoryzacja, sieć bayesowska i tabele prawdopodobieństw warunkowych, wnioskowanie przez wyliczanie, wyjaśnienie przez inną przyczynę, d-separacja i wnioskowanie przybliżone przez próbkowanie — na sieci pochmurno, zraszacz, deszcz, mokra trawa.

13 minut Matěj Žalmánek 2026-10-15

Seria Podstawy AI Część 40 z 52
  1. Mapa sztucznej inteligencji: co jest czym i jak to do siebie pasuje
  2. Krótka historia sztucznej inteligencji: od Turinga do modeli językowych
  3. Dane, model, trening, inferencja: podstawowe pojęcia na jednym przykładzie
  4. Jak czytać zapis matematyczny: symbole, indeksy, sumy i kwantyfikatory
  5. Zbiory i relacje: klocki, z których składają się definicje w AI
  6. Funkcje i odwzorowania: dlaczego każdy model AI jest funkcją
  7. Logika i dowody: reguły, według których rozumuje AI
  8. Grafy i drzewa: struktura, na której opierają się przeszukiwanie i sieci neuronowe
  9. Algebra liniowa dla uczenia maszynowego: wektory, macierze i dlaczego AI głównie mnoży
  10. Pochodne, gradient i reguła łańcuchowa: jak model ustala, w którą stronę się uczyć
  11. Spadek gradientu: jak uczy się model
  12. Czym jest prawdopodobieństwo: od rzutu kostką do aksjomatów Kołmogorowa
  13. Prawdopodobieństwo warunkowe i twierdzenie Bayesa: jak zmienić ocenę, gdy dowiesz się czegoś nowego
  14. Zmienna losowa i dystrybuanta: jedna funkcja, która mówi o rozkładzie wszystko
  15. Funkcja gęstości i funkcja prawdopodobieństwa: dlaczego zmienna ciągła ma w punkcie prawdopodobieństwo zero
  16. Wartość oczekiwana, wariancja i kowariancja: gdzie leży rozkład, jak jest szeroki i co z czym się wiąże
  17. Przegląd rozkładów prawdopodobieństwa: Bernoulliego, dwumianowy, Poissona, jednostajny, normalny i wykładniczy
  18. Prawo wielkich liczb i centralne twierdzenie graniczne: dlaczego średnie zachowują się tak przewidywalnie
  19. Statystyka i estymacja parametrów: największa wiarygodność, MAP i przedziały ufności
  20. Teoria informacji: entropia, entropia krzyżowa i dywergencja KL — skąd się biorą funkcje straty
  21. Przeszukiwanie przestrzeni stanów: BFS, DFS, UCS i A* z animacjami
  22. Gry i przeciwnik: minimax, przycinanie alfa-beta i Monte Carlo tree search
  23. Spełnianie ograniczeń: backtracking, propagacja ograniczeń i AC-3 na sudoku i mapie czeskich krajów
  24. Logika i systemy z bazą wiedzy: wnioskowanie w przód i wstecz, rezolucja i systemy ekspertowe
  25. Planowanie: STRIPS, świat klocków, heurystyki z relaksacji i planowanie w agentach AI
  26. Przeszukiwanie lokalne i symulowane wyżarzanie: komiwojażer przez czeskie miasta wojewódzkie
  27. Algorytmy genetyczne: populacja, krzyżowanie, mutacja i selekcja na plecaku na wycieczkę
  28. Strategie ewolucyjne i programowanie genetyczne: od reguły jednej piątej do prawa Keplera
  29. Optymalizacja kolonią mrówek: jak ślad feromonowy znajduje krótką drogę
  30. Optymalizacja rojem cząstek: bezwładność, własne doświadczenie i doświadczenie roju
  31. Neuroewolucja: ewolucja wag i kształtu sieci neuronowych oraz algorytm NEAT
  32. Zbiory rozmyte i funkcje przynależności: jak zapisać „trochę ciepło”
  33. Logika rozmyta a prawdopodobieństwo: dlaczego „trochę ciepło” nie znaczy „prawdopodobnie ciepło”
  34. Logika rozmyta: t-normy, implikacje i reguły JEŻELI–TO
  35. Sterowanie rozmyte: Mamdani i Sugeno od wentylatora po wahadło na wózku
  36. Klasteryzacja rozmyta: algorytm fuzzy c-means i punkty między skupieniami
  37. Systemy neuro-rozmyte (ANFIS): reguły rozmyte, które uczą się z danych
  38. Łańcuchy Markowa: macierz przejścia, rozkład stacjonarny i PageRank
  39. Ukryte modele Markowa: algorytm Viterbiego i nieuczciwe kasyno
  40. Sieci bayesowskie: dlaczego trawa jest mokra i co z tego wynika dla zraszacza
  41. Filtr Kalmana: jak z niedokładnych pomiarów oszacować, gdzie jest samochód i jak szybko jedzie
  42. Rodzaje uczenia maszynowego: nadzorowane, nienadzorowane, półnadzorowane i inne
  43. Prompty, kontekst i RAG: jak dać modelowi właściwe informacje
  44. Wariacyjne autoenkodery (VAE): nowe obrazki z ciągłej przestrzeni latentnej
  45. Generatywne sieci przeciwstawne (GAN): fałszerz kontra detektyw
  46. Modele dyfuzyjne: jak z czystego szumu powstaje obraz
  47. Procesy decyzyjne Markowa: stany, akcje, nagrody i równania Bellmana
  48. Q-learning i DQN: uczenie się wartości akcji od tabeli po sieć neuronową
  49. Policy gradient i PPO: uczenie się bezpośrednio polityki
  50. Jak działa agent AI: model językowy w pętli z narzędziami
  51. Programowanie z agentami AI: zadanie, testy i kontrola
  52. Ocena i bezpieczeństwo systemów AI: jak mierzyć i jak pilnować

Pełny program serii Gotowe: 52 z 83 tematów

Czego się dowiesz
  • Jak sieć bayesowska skraca olbrzymią tabelę prawdopodobieństw do kilku małych tabel.
  • Jak w sieci wnioskuje się od skutków do przyczyn i czym jest wyjaśnienie przez inną przyczynę.
  • Jak odczytać z grafu, które zmienne są niezależne, i jak szacuje się prawdopodobieństwa próbkowaniem.

Warto wiedzieć wcześniej: Prawdopodobieństwo warunkowe i twierdzenie Bayesa: jak zmienić ocenę, gdy dowiesz się czegoś nowego, Grafy i drzewa: struktura, na której opierają się przeszukiwanie i sieci neuronowe

Rano wychodzisz z domu, a trawa jest mokra. Padało, czy działał zraszacz? A kiedy potem od sąsiada dowiesz się, że w nocy padało — czy to zmieni to, co myślisz o zraszaczu? Człowiek rozumuje tak bez zastanowienia. Maszyna też to potrafi, jeśli wie, co z czym się wiąże. Sieć bayesowska to obraz tych powiązań, z którego da się obliczyć odpowiedź na dowolne pytanie. Judea Pearl otrzymał za nią i za rozwiniętą na niej teorię przyczynowości Nagrodę Turinga w 2011 roku.

Ta część nawiązuje do części Prawdopodobieństwo warunkowe i twierdzenie Bayesa oraz Grafy i drzewa.

1. Problem wielkiej tabeli

Pełna informacja o kilku zmiennych losowych to ich rozkład łączny — prawdopodobieństwo każdej kombinacji wartości. Dla czterech zmiennych tak/nie kombinacji jest 16, czyli 15 niezależnych liczb. Dla 37 zmiennych (tyle ma znana sieć medyczna ALARM do monitorowania pacjentów w znieczuleniu) byłoby to ponad 137 miliardów liczb, nawet gdyby wszystkie były tylko tak/nie. Takiej tabeli nikt nie zbuduje, nie przechowa ani nie oszacuje z danych. Ratuje nas to, że większość zmiennych wiąże się ze sobą tylko pośrednio.

Definicja — rozkład łączny i liczba jego parametrów

Rozkład łączny dyskretnych zmiennych X1, …, Xn to funkcja P(x1, …, xn) = P(X1 = x1, …, Xn = xn), która jest nieujemna i po wszystkich kombinacjach wartości sumuje się do 1. Dla n zmiennych tak/nie ma 2n wartości; ostatnią obliczymy z pozostałych (suma wynosi 1), więc niezależnych parametrów jest 2n − 1.

Obliczenie. 24 − 1 = 15; 237 − 1 = 137 438 953 471.

Twierdzenie — reguła łańcuchowa

Dla dowolnych zmiennych i każdej kombinacji wartości o dodatnim prawdopodobieństwie zachodzi

P(x1, …, xn) = P(x1) · P(x2 | x1) · P(x3 | x1, x2) ⋯ P(xn | x1, …, xn−1) = ∏i=1n P(xi | x1, …, xi−1).

Dowód: z definicji prawdopodobieństwa warunkowego P(x1, …, xn) = P(xn | x1, …, xn−1) · P(x1, …, xn−1). To samo stosujemy do drugiego czynnika i tak dalej, aż zostanie P(x1). ∎

Reguła łańcuchowa niczego nie oszczędza: ostatni czynnik nadal zależy od wszystkich poprzednich zmiennych, więc to tylko inny zapis tej samej olbrzymiej tabeli. Oszczędność przyjdzie, gdy niektóre warunki pominiemy.

2. Sieć bayesowska

Definicja — sieć bayesowska

Sieć bayesowska nad zmiennymi X1, …, Xn to skierowany graf acykliczny, którego wierzchołkami są zmienne, wraz z tabelą prawdopodobieństw warunkowych P(Xi | rodzice(Xi)) dla każdego wierzchołka. Sieć wyznacza rozkład łączny

P(x1, …, xn) = ∏i P(xi | rodzice(Xi)).

Mówiąc prościej

Strzałki prowadzą od przyczyn do skutków. Przy każdej zmiennej wystarczy wiedzieć, jak zależy od swoich bezpośrednich przyczyn — nic więcej. Prawdopodobieństwo całej sytuacji to iloczyn tych lokalnych liczb. Zamiast jednej olbrzymiej tabeli mamy kilka małych.

Dlaczego sieć może zapisać tylko P(xi | rodzice), a nie całą historię jak reguła łańcuchowa? Bo zakłada o grafie warunkowe niezależności.

Definicja — niezależność warunkowa

Zmienne A i C są warunkowo niezależne przy E, piszemy A ⊥ C | E, gdy dla wszystkich wartości a, c, e z P(c, e) > 0 zachodzi

P(a | c, e) = P(a | e)

P(a | c, e)
co wiemy o A, gdy znamy E i dodatkowo C
P(a | e)
co wiemy o A z samego E; równość mówi, że C już nic nie dodaje — cały związek A z C prowadzi przez E
Równoważnie P(a, c | e) = P(a | e) · P(c | e). Dla pustego E to zwykła niezależność.
Twierdzenie — faktoryzacja to reguła łańcuchowa plus lokalne niezależności

Uporządkujmy zmienne topologicznie (każdy rodzic przed swoimi dziećmi). Jeśli każda zmienna Xi przy znanych rodzicach jest warunkowo niezależna od wszystkich zmiennych, które nie są jej potomkami (lokalny warunek Markowa), to P(x1, …, xn) = ∏i P(xi | rodzice(Xi)).

Dowód: w regule łańcuchowej w porządku topologicznym stoi P(xi | x1, …, xi−1). Wśród X1, …, Xi−1 są wszyscy rodzice Xi i żaden jego potomek (potomek jest w porządku dopiero za nim). Zgodnie z warunkiem Markowa możemy wszystkie pozostałe usunąć z warunku i zostaje P(xi | rodzice(Xi)). ∎

Zachodzi to też odwrotnie: każdy rozkład dany iloczynem tabel spełnia lokalny warunek Markowa. Dlatego sieć bayesowską można zdefiniować dowolnym z tych dwóch sposobów.

Nasza sieć: gdy jest pochmurno, bardziej prawdopodobny jest deszcz, a mniej prawdopodobne, że ktoś włączy zraszacz. Zarówno deszcz, jak i zraszacz sprawiają, że trawa jest mokra. Liczby pochodzą z popularnego przykładu Kevina Murphy’ego:

pochmurno Z P(Z) 0,5 zraszacz P Z P(P) − 0,5 + 0,1 deszcz D Z P(D) − 0,2 + 0,8 mokra trawa T P D P(T) + − 0,9 + + 0,99 − + 0,9 − − 0
Sieć „mokra trawa” z tabelami prawdopodobieństw warunkowych + tak, − nie

Sieć ma 1 + 2 + 2 + 4 = 9 liczb zamiast 15. Przy czterech zmiennych to mała oszczędność, przy setkach olbrzymia: jeśli każdy wierzchołek ma najwyżej k rodziców, liczba liczb rośnie z n liniowo (n · 2k), a nie wykładniczo (2n). Prawdopodobieństwo sytuacji „pochmurno, zraszacz nie działał, padało, trawa mokra” wynosi 0,5 · 0,9 · 0,8 · 0,9 = 0,324.

P(z, p, d, t) = P(z) · P(p | z) · P(d | z) · P(t | p, d)

P(z)
pochmurno nie ma rodziców, jego tabela to jedna liczba; w przykładzie 0,5
P(p | z)
zraszacz zależy tylko od chmur — tu nic nie różni się od reguły łańcuchowej; w przykładzie nie działał przy pochmurnym niebie: 1 − 0,1 = 0,9
P(d | z)
reguła łańcuchowa chciałaby P(d | z, p); sieć zakłada, że przy znanym niebie zraszacz nic nie mówi o deszczu, więc p wypada z warunku; w przykładzie 0,8
P(t | p, d)
reguła łańcuchowa chciałaby P(t | z, p, d); trawa „wie” o chmurach tylko przez deszcz i zraszacz, więc wypada z; w przykładzie (zraszacz nie, deszcz tak) 0,9
Każdy pominięty element warunku to jedna warunkowa niezależność, którą sieć zakłada — właśnie one skracają 15 liczb do 9.

3. Wnioskowanie: od skutku do przyczyny

Definicja — wnioskowanie przez wyliczanie

Prawdopodobieństwo zapytania Q przy obserwacjach E = e wynosi

P(Q | e) = ∑y P(Q, e, y) / ∑q, y P(q, e, y),

gdzie sumuje się po wszystkich wartościach y pozostałych (ukrytych) zmiennych, a każdy składnik jest iloczynem z faktoryzacji sieci.

Mówiąc prościej

Przechodzimy przez wszystkie możliwe światy, które zgadzają się z tym, co wiemy (trawa jest mokra), i patrzymy, jaką wagę mają wśród nich te, w których padało. To twierdzenie Bayesa z części o prawdopodobieństwie warunkowym, tylko sumuje się po większej liczbie zmiennych naraz.

P(Q | e) = ∑y P(Q, e, y) / ∑q, y P(q, e, y)

e
obserwacje (dowody) — wartości, które zaobserwowaliśmy (u nas mokra trawa); we wszystkich sumowanych światach są ustalone
∑y
zmiennych ukrytych (u nas pochmurno i zraszacz) nie znamy i nas nie interesują, więc sumujemy wszystkie ich możliwości — marginalizacja; światy wzajemnie się wykluczają, więc prawdopodobieństwa się dodają
P(Q, e, y)
prawdopodobieństwo jednego pełnego świata, w którym zachodzą zapytanie i obserwacje — iloczyn liczb z tabel według faktoryzacji
∑q, y P(q, e, y)
= P(e), waga wszystkich światów zgodnych z obserwacjami; dzielenie to definicja prawdopodobieństwa warunkowego P(Q | e) = P(Q, e) / P(e) i gwarantuje, że P(Q | e) + P(¬Q | e) = 1
Przykład — P(deszcz | mokra trawa) przez wyliczanie

Obserwacja to T = tak, zapytanie D, ukryte są Z i P. Światów z mokrą trawą jest 23 = 8; każdy to iloczyn P(z) · P(p | z) · P(d | z) · P(t | p, d):

deszczpochmurnozraszacziloczynP(świat)
taktaktak0,5 · 0,1 · 0,8 · 0,990,0396
taknietak0,5 · 0,5 · 0,2 · 0,990,0495
taktaknie0,5 · 0,9 · 0,8 · 0,90,3240
taknienie0,5 · 0,5 · 0,2 · 0,90,0450
nietaktak0,5 · 0,1 · 0,2 · 0,90,0090
nienietak0,5 · 0,5 · 0,8 · 0,90,1800
nietaknie0,5 · 0,9 · 0,2 · 00,0000
nienienie0,5 · 0,5 · 0,8 · 00,0000

Pierwsze cztery wiersze (padało) dają P(D, T) = 0,4581, wszystkie osiem P(T) = 0,6471. Ostatnie dwa wiersze są zerowe: bez deszczu i bez zraszacza trawa nie jest mokra. Zatem

P(D | T) = 0,4581 / 0,6471 = 0,708.

def dotaz(Q, dukazy, sit):
    citatel = jmenovatel = 0.0
    for svet in vsechna_prirazeni(sit):              # 2^n pełnych światów
        if any(svet[k] != v for k, v in dukazy.items()):
            continue                                 # niezgodny z obserwacjami
        p = 1.0
        for uzel in sit:                             # faktoryzacja sieci
            p *= P(uzel, svet[uzel], svet[rodice(uzel)])
        jmenovatel += p                              # → P(e)
        if svet[Q]:
            citatel += p                             # → P(Q, e)
    return citatel / jmenovatel

Z góry (bez żadnej obserwacji) prawdopodobieństwo deszczu wynosi 0,5, a zraszacza 0,3. Mokra trawa podnosi oba: P(deszcz | mokra trawa) = 0,708 i P(zraszacz | mokra trawa) = 0,430. Deszcz jest bardziej prawdopodobnym wyjaśnieniem, bo pada częściej, niż działa zraszacz. Mokra trawa podnosi też prawdopodobieństwo, że było pochmurno — z 0,5 do 0,576 —, choć trawa i chmury nie są ze sobą bezpośrednio powiązane. Informacja płynie przez sieć pod prąd strzałek.

4. Wyjaśnienie przez inną przyczynę

Teraz dowiadujemy się, że w nocy naprawdę padało. Co się stanie ze zraszaczem?

00,51 0,30 0,43 0,19 zraszacz 0,50 0,71 0,32 deszcz przyczyna mokrej trawy (kategoria) prawdopodobieństwo P (0–1)
Zraszacz i deszcz: z góry, przy mokrej trawie i przy mokrej trawie, gdy wiemy o drugiej przyczynie z góry trawa jest mokra i wiemy o drugiej przyczynie

Prawdopodobieństwo zraszacza spada z 0,430 do 0,194. Deszcz już wyjaśnił mokrą trawę, więc dla zraszacza nie zostaje powód. I odwrotnie: gdy wiemy, że działał zraszacz, prawdopodobieństwo deszczu spada z 0,708 do 0,320. To zjawisko nazywa się wyjaśnieniem przez inną przyczynę (explaining away). Dwie przyczyny, które z góry wiązały się ze sobą tylko słabo, zaczynają się nawzajem „wypierać”, gdy tylko zaobserwujemy ich wspólny skutek. A gdybyśmy wiedzieli, że nie padało, zraszacz musiałby działać: P(zraszacz | mokra trawa, brak deszczu) = 1, bo w naszej sieci trawa sama z siebie mokra być nie może.

Przykład — wyjaśnienie przez inną przyczynę w liczbach

Z tabeli w poprzednim przykładzie: światy, w których padało, działał zraszacz i trawa jest mokra, mają łącznie P(P, D, T) = 0,0396 + 0,0495 = 0,0891. Dlatego

P(P | T, D) = P(P, D, T) / P(D, T) = 0,0891 / 0,4581 = 0,194,

P(D | T, P) = P(P, D, T) / P(P, T) = 0,0891 / 0,2781 = 0,320.

Formalnie wyjaśnienie przez inną przyczynę to nierówność P(P | T, D) < P(P | T): potwierdzenie jednej przyczyny obniża prawdopodobieństwo drugiej (0,194 < 0,430).

5. Co można odczytać z sieci: d-separacja

Graf mówi nie tylko, jak liczyć — mówi też, które zmienne są od siebie niezależne, i to bez jednej liczby. Wszystkie możliwości składają się z trzech podstawowych kształtów:

  • Łańcuch A → B → C: A i C są powiązane, ale gdy znamy B, już nie. (Pochmurno → deszcz → mokra trawa: kto wie, czy padało, temu chmury nic o trawie nie powiedzą.)
  • Rozwidlenie A ← B → C: wspólna przyczyna czyni A i C zależnymi; gdy ją znamy, zależność znika. (Zraszacz i deszcz z góry wiążą się przez chmury: P(zraszacz | deszcz) = 0,18, ale P(zraszacz | brak deszczu) = 0,42. Gdy wiemy, czy jest pochmurno, są niezależne.)
  • Zderzenie A → B ← C: przyczyny są niezależne, dopóki nie zaobserwujemy wspólnego skutku — wtedy stają się zależne. To jest wyjaśnienie przez inną przyczynę.
Definicja — d-separacja

Ścieżka w grafie (bez względu na kierunek strzałek) jest zablokowana przez zbiór E, gdy leży na niej łańcuch lub rozwidlenie ze środkiem w E albo zderzenie, którego środek ani żaden jego potomek nie należy do E. Zmienne A i C są d-separowane przez zbiór E, gdy E blokuje wszystkie ścieżki między nimi. Wtedy w każdym rozkładzie, który sieć wyznacza, są warunkowo niezależne przy E.

Mówiąc prościej

Informacja płynie przez graf po ścieżkach. Znana zmienna w środku łańcucha lub rozwidlenia zatrzymuje przepływ — jest już „wyjaśniona”. Przy zderzeniu jest odwrotnie: dopóki skutku nie znamy, przepływ tam stoi; gdy tylko go zaobserwujemy, otwiera się. Z rysunku można więc odczytać, co trzeba mierzyć, a co jest zbędne.

W naszej sieci pochmurno i mokra trawa są d-separowane, gdy znamy zarówno zraszacz, jak i deszcz — obliczenie to potwierdza: prawdopodobieństwo pochmurnego nieba w ogóle nie zależy wtedy od trawy.

Przykład — trzy kształty sprawdzone obliczeniem
  • Rozwidlenie zraszacz ← pochmurno → deszcz. Bez znajomości nieba: P(P | D) = 0,18 ≠ P(P) = 0,3, zależne. Przy znanym niebie: P(P | Z, D) = 0,1 = P(P | Z), czyli P ⊥ D | Z.
  • Zderzenie zraszacz → mokra trawa ← deszcz. Przy znanym niebie P i D są niezależne (P(P | Z, D) = P(P | Z, ¬D) = 0,1), ale gdy tylko zaobserwujemy trawę, już nie: P(P | Z, D, T) = 0,109, natomiast P(P | Z, ¬D, T) = 1.
  • D-separacja pochmurnego nieba i mokrej trawy przez zbiór {P, D}: obie ścieżki Z → P → T i Z → D → T to łańcuchy ze znanym środkiem, więc są zablokowane. I rzeczywiście: P(Z | P, D) = 0,444 i P(Z | P, D, T) = 0,444; P(Z | P, ¬D) = 0,048 i P(Z | P, ¬D, T) = 0,048.

6. Wnioskowanie przybliżone przez próbkowanie

Wnioskowanie przez wyliczanie przechodzi przez wszystkie kombinacje zmiennych ukrytych — w ogólnej sieci wykładniczo wiele. Dokładne wnioskowanie w sieciach bayesowskich jest NP-trudne. Dla dużych sieci prawdopodobieństwa się więc szacuje symulacją.

Algorytmy — próbkowanie z odrzucaniem i ważenie wiarygodnością

Próbkowanie z odrzucaniem: generuj światy z sieci (od przyczyn do skutków, według tabel), odrzuć te, które nie zgadzają się z obserwacjami, i wśród pozostałych oblicz odsetek, w którym zachodzi zapytanie.

Ważenie wiarygodnością: obserwacji nie losuj, tylko je ustal; każdy wygenerowany świat zważ iloczynem prawdopodobieństw obserwacji przy wartościach ich rodziców. Oszacowanie to ważony odsetek.

Mówiąc prościej

Odrzucanie jest uczciwe, ale marnotrawne: gdy obserwacja jest rzadka, wyrzuca prawie wszystkie próbki. Ważenie wiarygodnością niczego nie wyrzuca — tylko każdej próbce przydziela wagę według tego, jak dobrze pasuje do tego, co wiemy.

def zamitani(Q, dukazy, n, sit):
    prijato = ano = 0
    for _ in range(n):
        svet = {}
        for uzel in sit:                             # od przyczyn do skutków
            svet[uzel] = nahoda() < P(uzel, True, svet[rodice(uzel)])
        if any(svet[k] != v for k, v in dukazy.items()):
            continue                                 # do kosza
        prijato += 1
        ano += svet[Q]
    return ano / prijato

def vazena(Q, dukazy, n, sit):
    s = s_ano = 0.0
    for _ in range(n):
        svet, w = {}, 1.0
        for uzel in sit:
            p = P(uzel, True, svet[rodice(uzel)])
            if uzel in dukazy:                       # obserwacji nie losujemy…
                svet[uzel] = dukazy[uzel]
                w *= p if dukazy[uzel] else 1 - p    # …ale ważymy, jak jest prawdopodobna
            else:
                svet[uzel] = nahoda() < p
        s += w
        s_ano += w * svet[Q]
    return s_ano / s

P̂(Q | e) = ∑k wk [Q zachodzi w próbce k] / ∑k wk,   wk = ∏j P(ej | rodzicek)

wk
waga próbki (na zielono jak krzywa ważenia wiarygodnością na wykresie) — iloczyn prawdopodobieństw wszystkich obserwacji ej przy wartościach ich rodziców, które wypadły w próbce k: obserwacji nie losowaliśmy, tylko je narzuciliśmy, więc musimy uwzględnić, jak prawdopodobne byłyby przy pozostałych wylosowanych wartościach — inaczej oszacowanie byłoby obciążone
[Q zachodzi w próbce k]
1, gdy w próbce zachodzi zapytanie, w przeciwnym razie 0 — liczymy tylko wagę próbek, w których padało
∑k wk
całkowita waga; dzieląc przez nią, robimy z sumy odsetek, tak samo jak dzielenie przez P(e) przy wyliczaniu. Dzięki temu nie przeszkadza, że wagi nie sumują się do 1
Odrzucanie to szczególny przypadek: waga wynosi 1 dla próbek zgodnych z obserwacjami i 0 dla pozostałych.
Przykład — wagi przy obserwacji „trawa jest mokra”

Jedyna obserwacja to T = tak, jej rodzicami są zraszacz i deszcz. Waga próbki to więc po prostu P(T = tak | p, d) z tabeli mokrej trawy:

  • zraszacz i deszcz: w = 0,99,
  • tylko jedno z nich: w = 0,9,
  • żadne: w = 0 — taka próbka nigdzie się nie przyczyni, tak samo jak odrzucanie by ją wyrzuciło.

Od nieba waga nie zależy: pochmurno nie jest rodzicem trawy.

0,60,70,8 101001 00010 000 próbki (liczba, skala log.) oszacowanie P(deszcz | mokra) (0–1)
Oszacowanie P(deszcz | mokra trawa) w zależności od liczby próbek odrzucanie ważenie wiarygodnością dokładnie 0,708

Przy stu próbkach odrzucanie dało oszacowanie 0,686 i wykorzystało tylko 70 z nich — pozostałe 30 miało suchą trawę i poszło do kosza. Przy 10 000 próbek (z których zostało 6 524) oszacowanie wynosi 0,703, blisko dokładnej wartości 0,708. Błąd maleje jak 1/√N, jak mówi centralne twierdzenie graniczne: dla dziesięć razy dokładniejszego oszacowania potrzeba sto razy więcej próbek.

σP̂ = √(p(1 − p) / Nprzyj),   Nprzyj ≈ N · P(e)

p(1 − p)
wariancja jednej próbki typu tak/nie (rozkład zero-jedynkowy z prawdopodobieństwem p); największa jest dla p = 0,5, kiedy pojedyncza próbka jest najmniej przewidywalna
Nprzyj
liczba próbek, które naprawdę się liczą; przy odrzucaniu tylko te, które przeszły, a stanowią one średnio odsetek P(e) — przy rzadkiej obserwacji prawie żadne. Wariancja średniej z N niezależnych próbek jest N razy mniejsza
Pierwiastek przekłada wariancję z powrotem na jednostki prawdopodobieństwa — dlatego błąd maleje tylko jak 1/√N. (Równość jest przybliżona: liczba przyjętych próbek sama jest losowa.)
Przykład — jakiego błędu się spodziewać

Dokładnie p = 0,708 i P(e) = P(T) = 0,6471, więc z 10 000 próbek spodziewamy się około 6 471 przyjętych (w rzeczywistości było ich 6 524).

  • Nprzyj = 70: σ = √(0,708 · 0,292 / 70) = 0,054; rzeczywisty błąd |0,686 − 0,708| = 0,022.
  • Nprzyj = 6 524: σ = 0,0056; rzeczywisty błąd 0,0050.

Oba rzeczywiste błędy są mniejsze niż jedno odchylenie standardowe — zgodnie z tym, że mniej więcej dwie trzecie oszacowań wpada w ±σ (rozkład normalny według centralnego twierdzenia granicznego).

7. Sieci bayesowskie w praktyce

  • Diagnostyka. Sieci medyczne (ALARM, QMR-DT z setkami chorób i tysiącami objawów) oraz diagnostyka awarii maszyn i sieci: z zaobserwowanych objawów wywnioskować najbardziej prawdopodobną przyczynę — i zaproponować, co zmierzyć dalej.
  • Uczenie z danych. Tabele da się oszacować z danych przez zliczanie (metodą największej wiarygodności z części o statystyce), nawet gdy niektórych wartości brakuje — algorytmem EM, krewnym algorytmu Bauma–Welcha z poprzedniej części.
  • Przyczynowość. Pearl pokazał, że sieć czytana jako graf przyczyn potrafi odpowiadać także na pytania „co by się stało, gdybyśmy interweniowali” — sami włączyli zraszacz — czego z samych korelacji odczytać się nie da. Na tym opiera się dzisiejsze wnioskowanie przyczynowe w epidemiologii i ekonomii.
  • Krewni. Naiwny klasyfikator bayesowski to sieć bayesowska z jedną przyczyną i wieloma niezależnymi skutkami. Ukryte modele Markowa z poprzedniej części to sieć bayesowska rozwinięta w czasie.

8. Podsumowanie

  • Sieć bayesowska to skierowany graf acykliczny z tabelami P(X | rodzice); rozkład łączny to iloczyn tych tabel. Nasza sieć potrzebuje 9 liczb zamiast 15.
  • Wnioskowanie działa też pod prąd strzałek: mokra trawa podnosi prawdopodobieństwo deszczu do 0,708, a zraszacza do 0,430.
  • Wyjaśnienie przez inną przyczynę: gdy wiemy, że padało, prawdopodobieństwo zraszacza spada do 0,194.
  • D-separacja odczytuje niezależności wprost z grafu — łańcuch i rozwidlenie obserwacja zamyka, zderzenie otwiera.
  • Dokładne wnioskowanie jest w ogólności NP-trudne; próbkowanie daje oszacowania z błędem malejącym jak 1/√N.

Chcesz to wypróbować na własnej skórze? Poproś agenta AI, żeby zbudował sieć bayesowską dla awarii twojego samochodu lub komputera („nie odpala — akumulator czy rozrusznik?”), i sprawdź, jak zmienia się podejrzenie, gdy dodajesz obserwacje.

Masz inne zdanie? Napisz na support@coden-app.com.

Agent na twoim komputerze, sterowany z telefonu