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