Algorytmy stochastyczne Wykład 09 – 11, Wnioskowanie w sieciach
Transkrypt
Algorytmy stochastyczne Wykład 09 – 11, Wnioskowanie w sieciach
Algorytmy stochastyczne Wykład 09 – 11, Wnioskowanie w sieciach bayesowskich Jarosław Piersa 2014-03-13 1 Przybliżone algorytmy wnioskowania 1.1 Próbkowanie logiczne Dane: sieć bayesowska wraz z CPT, wiedza E, węzeł X z poza wiedzy X ∈ /E Wynik: Prawdopodobieństwo P(X = xi |E), dla ustalonego (wszystkich) xi Algorytm • wylosuj rodziców zgodnie z prawdopodobieństwem z ich tabel, • rekurencyjnie losuj potomków zgodnie prawdopodobieństwem odczytanym dla ustalonych rodziców, • jeżeli wylosowana próbka nie spełnia wiedzy to ją odrzuć i rozpocznij kolejne losowanie, • wylosuj w powyższy sposób M próbek spełniających wiedzę • zwróć: P(X = xi ) := liczba próbek spełniających X = xi M UWAGA! jeżeli w wiedzy E jest ustalonych wiele zmiennych, to algorytm odrzuca znaczną większość próbek i potrzeba wiele losowań aby uzyskać zadaną liczbę zaakceptowanych próbek. 1.2 Ważone próbkowanie logiczne (ang. weighted logic sampling ) Dane: sieć bayesowska wraz z CPT, wiedza E, węzeł X z poza wiedzy X ∈ /E Wynik: Prawdopodobieństwo P(X = xi |E), dla ustalonego (wszystkich) xi Algorytm • losowanej próbce przypisz wagę wj := 1 • losując próbkę wymuszaj stany zgodnie z wiedzą, ale przy takim wymuszeniu zmień wagę (np. wymuszamy stan Y = y1 ): wj := wj · P(Y = y1 |Rodzice(Y )) • po wylosowaniu M próbek zwróć: PM P(X = xi |E) = j=1 1X j =xi · wj PM j=1 wj . Uwaga! Jeżeli wiedza jest sprzeczna to mianownik będzie zerowy. Przy wielu węzłach w wiedzy mogą się pojawić problemy numeryczne (sumowanie bardzo małych prawdopodobieństw i dzielenie przez bardzo mały mianownik) 1.3 Próbnik Gibbsa (Gibbs sampling) Dane i wynik: jak wyżej Algorytm • Wybierz losowy węzeł Z, który nie zawiera wiedzy, • Oblicz rozkład prawdopodobieństwa Z dla tego węzła warunkując po wszystkich pozostałych węzłach w sieci (równoważnie: po jego rodzicach, potomkach i rodzeństwie) Y P(Z|V \{Z}) ∝ P(Z = zj |Rodzice(Z)) · P(U = u|Rodzice(U ), Z = zj ) U ∈Dzieci(Z) 1 • wylosuj nowy stan dla Z zgodnie z tym rozkładem powtarzaj wielokrotnie zapamiętując częstości przyjmowania X = xi • zwróć: P(X = xi |E) := częstość występowania stanów sieci w których X = xi Jak obliczyć rozkład P(Z|Blanket(Z))? P(Z = zj |V \{Z}) ∝ P(Z = zj |Rodzice(Z)) · Q U ∈Dzieci(Z) P(U = u|Rodzice(U )) Q P(Z = zj |Rodzice(Z)) · P(U = u|Rodzice(U ), Z = zj ) U ∈Dzieci(Z) = P(Z = z 0 |Rodzice(Z)) · P stany z0 ∈ Q P(U = u|Rodzice(U ), Z = z 0 ) U ∈Dzieci(Z) (Z) Przy czy • P(Z = zj |Rodzice(Z)) — bezpośrednio z tabeli (rodzice są ustaleni) • Rodzice(U ) — Z również jest rodzicem U , jest jedynym rodzicem U , który może się w bieżącej iteracji zmieniać • P(U = u|Rodzice(U )) = P(U = u|Rodzice(U ), Z = z 0 ) — z tabeli (dla ustalonego Z = z 0 ) 2 Wnioskowanie dokładne 2.1 Naiwny klasyfikator bayesowski Naive bayesian classifier NBC — sieć bayesowska o ograniczonej strukturze, ale dzięki temu daje bardzo proste metody wnioskowania. Powód Symptom 1 Symptom 2 ··· Symptom 3 Symptom n • przyczyna P , zmienna do zdiagnozowania — znajduje się w korzeniu drzewa, • symptomy S1 , ..., Sn , zmienne obserwowalne znajdują się w liściach, • wiedzę wprowadzamy do liści (być może nie wszystkich): tzn jakie są objawy, • wnioskujemy o przyczynie (co spowodowało takie zachowanie). Dane: wiedza E: znane wartości (niektórych) węzłów w liściach. Wynik: prawdopodobieństwo P(P = pi |E) dla wszystkich możliwych przyczyn pi . W ten sposób otrzymujemy najbardziej prawdopodobne wyjaśnienie. • Chcemy P(P = pi |E) = = = P(P = pi ∧ E) P(E) P(E|P = pi ) · P(P = pi ) P(E) Q P(V = vi |P = pi ) · P(P = pi ) V ∈E Q P(E) P(V = vi |P = pi ) P(P = pi ) V ∈E = P(E) • P(P = pi ) oraz P(V = vi |P = pi ) bezpośrednio z CPT • P(E) jest tylko czynnikiem normalizującym (aby prawdopodobieństwa sumowały się do 1) • i tak zamierzamy policzyć P(P = pi |E) dla każdego pi , zatem: – obliczamy liczniki z równania (1) dla każdego P = pi – S = suma liczników z równania (1) – Obliczamy P(P = pi |E) := 2 licznik z równania (1) S (1) 2.2 Wnioskowanie w łańcuchach Przypadek 1: sieć bayesowska ma strukturę łańcucha, tzn. każdy wierzchołek (poza korzeniem) ma dokładnie jednego rodzica; i każdy wierzchołek (poza jedynym liściem) ma dokładnie jednego syna. U X Y Dana jest wiedza E, tj. informacje że dla pewnych wierzchołków V = vi . Chcemy obliczyć P(X = xi |E), dla X w którym nie ma wiedzy (ogólnie: wszystkich takich X). Podzielmy wiedzę na E = E+ ∪ E− , gdzie • E+ — wierzchołki leżące ponad X (przyczyny X), na podstawie E+ przewidujemy zachowanie X (predykcja), • E− — wierzchołki leżące poniżej X (skutki X), na podstawie E− diagnozujemy wystąpienie X (diagnostyka). Mamy: P(X = xi |E) = = = = P(X = xi ∩ E) P(E) P(X = xi ∩ E+ ∩ E− ) P(E+ ∩ E− ) P(E− |X = xi ∩ E+ ) · P(X = xi ∩ E+ )· P(E+ ∩ E− ) P(E− |X = xi ∩ E+ ) · P(X = xi |E+ ) · P(E+ ) P(E+ ∩ E− ) +) nie zależy od X (stała normująca). Zamiast go liczyć można posumować resztę wyrażenia po wszystkich Czynnik P(EP(E + ∩E− ) możliwych stanach X = xi . Będziemy pisać: P(X = xi |E) ∝ P(X = xi |E+ )P(E− |X = xi ∩ E+ ), co oznacza, że prawdopodobieństwo zaobserwowania X = xi przy wiedzy E jest proporcjonalne do prawej strony. Dalej: • zastanówmy się nad: P(E− |X = xi ∩ E+ ), • jedyna ścieżka z E+ do E− musi przechodzić przez X (bo mamy łańcuch!), • X jest ustalony na xi (chcemy policzyć P(X = xi |E)), • zatem propagacja wiedzy z E+ do E− jest blokowana przez X • dodatkowe warunkowanie po E+ jest zbędne, • upraszczamy P(E− |X = xi ∩ E+ ) = P(E− |X = xi ) Upraszczamy we wzorze: P(X = xi |E) ∝ P(X = xi |E+ )P(E− |X = xi ). Oznaczmy π(x) = P(X = xi |E+ ) λ(x) = P(E− |X = xi ) gdzie • π E (xi ) — predictive support — jak bardzo prawdopodobne jest zaobserwowanie X = Xi przy wiedzy E, • λE (xi ) — diagnostic support — jak bardzo prawdopodobne jest, że wiedza E została spowodowana przez X = Xi . Jak obliczyć π? • Jeżeli U jest rodzicem X, to π(xi ) := X P(X = xi |U = u)π(u) u∈states(U ) states(U ) — sumujemy po wszystkich możliwych stanach węzła U (znaczy rodzica X). • wiadomości π musimy policzyć: dla każdego węzła i dla każdego stanu w danym węźle • warunki brzegowe: jeżeli w U jest wiedza, to π(ui ) := 1 dla stanu ui zgodnego z wiedzą oraz π(ui ) := 0 dla pozostałych stanów ui . 3 • warunki brzegowe: jeżeli U jest korzeniem, to π(ui ) := P(U = ui ) — prawdopodobieństwo apriori z tabeli • nie musimy liczyć warunków brzegowych dla π(V ), gdy V jest liściem (zadanie: dlaczego?) Jak obliczyć λ? • Jeżeli Y jest synem X to obliczamy X λ(xi ) := λ(y)P(Y = y|X = xi ) (2) y∈states(Y ) • Warunki brzegowe: jeżeli V jest liściem z wiedzą, to przypisujemy: λ(vi ) := 1 dla stanu vi zgodnego z wiedzą i λ(vj ) := 0 dla pozostałych. • Warunki brzegowe: jeżeli liściem bez wiedzy, to przypisujemy: λ(vi ) := 1 dla wszystkich vi . • Nie trzeba określać warunków brzegowych dla korzenia. Obserwacja: Wnioskując potrzebujemy wiadomości π od węzłów wcześniejszych i λ od późniejszych. Zatem π jest wiadomością propagowaną od korzenia do liścia, a λ od liścia do korzenia. Po wprowadzeniu wiedzy rozpoczynamy propagację obu wiadomości. Gdy obie przejdą całą sieć, to możemy policzyć prawdopodobieństwa aposteriori (warunkowe) dla wszystkich wierzchołków. Algorytm (szkielet) Dane: sieć bayesowska o kształcie łańcucha, prawdopodobieństwa warunkowe i wiedza E Wyniki: prawdopodobieństwa aposteriori P(X = xi |E) dla X z poza wiedzy. • Węzłach z wiedzą przygotuj wiadomości π(xi ) = 1 oraz λ(xi ) = 1 dla stanów zgodnych z wiedzą i π(xi ) = 0 oraz λ(xi ) = 0 dla pozostałych • Policz π(xi ) od w kolejnych węzłach od korzenia do liści (pomijając zamrożone węzły!) ( π(xi ) = P(XP = xi ) dla korzenia, z CPT jeżeli U jest rodzicem X P(X = xi |U = u)π(u) u∈states(U ) • Policz λ(xi ) od w kolejnych węzłach od liści do korzenia ( λ(xi ) = +1 P dla liści jeżeli Y jest synem X λ(y)P(Y = y|X = xi ) y∈states(Y ) • oblicz prawdopodobieństwa: π(x ) · λ(xi ) P i π(xj ) · λ(xj ) P(X = xi ) := xj ∈states(X) 2.3 Wnioskowanie w drzewach Przypadek 2. Sieć bayesowska jest drzewem tzn. dla dowolnych węzłów A, B istnieje dokładnie jedna ścieżka z A do B. Dodatkowo: drzewo jest ukorzenione, co oznacza, że każdy węzeł (poza korzeniem) ma dokładnie jednego rodzica. Jak poprzednio: chcemy obliczyć P(X = xi |E) dla pewnego X oraz wiedzy E, X ∈ / E. Y1 U X Y2 Podzielmy wiedzę na E = E+ ∪ E− , gdzie • E+ — wierzchołki leżące ponad X (przyczyny X) • E− — wierzchołki leżące poniżej X (skutki X) 4 Nadal pozostaje prawdą: P(X = xi |E) = P(E− |X = xi ∩ E+ ) · P(X = xi |E+ ) · P(E+ ) P(E+ ∩ E− ) ∝ P(X = xi |E+ )P(E− |X = xi ∩ E+ ) = P(X = xi |E+ )P(E− |X = xi ) Tym razem E− może się znajdować w różnych kowo na X = xi , co upraszcza λ(xi ) = = = = poddrzewach potomków X. Potomkowie (Y1 , Y2 ) X są niezależni warunP(E− |X = xi ) Y2 Y1 |X = xi ) , E− P(E− Y1 Y1 |X = xi ) P(E− |X = xi ) · P(E− λY1 (xi ) · λY2 (xi ) Nie należy mylić λ i λY : • λY (x) — wiadomość od potomka Y do rodzica X na stanie X = x • λ(x) — wartość wsparcia diagnostycznego dla X (od wszystkich potomków) λY (xi ) Y = P(EP − |X = xi ) Y = P(E− |Y = y, X = xi )P(Y = y|X = xi ) y∈states(Y ) P Y = P(E− |Y = y)P(Y = y|X = xi ) y∈states(Y ) P = λ(y) · P(Y = y|X = xi ) y∈states(Y ) Wzór przypomina (2), ale końcowe wsparcie λ(xi ) jest mnożone po wszystkich potomkach, stąd rozbicie na λYi (...). Dla rodzica U wierzchołka X: π(xi ) = P(XP = xi |E+ ) = P(xi |U = u, E+ )P(U = u|E+ ) u∈states(U ) P = P(xi |U = u)P(U = u|E+ ) u∈states(U ) P = P(xi |U = u)πX (u) (3) u∈states(U ) Jeżeli X ma jednego syna Y1 , to wiedza w poddrzewie jest już policzona i koniec. Jeżeli X ma dwóch lub więcej synów Y1 , Y2 , to wiedza z poddrzewa Y1 może wpływać na poddrzewo Y2 (wyjątek: wiedza jest w X i separuje Y1 i Y2 ) Jeżeli X otrzyma wiadomość λ od potomka Y1 , to uaktualnia wiadomość π dla potomka Y2 . πY2 (xi ) = = = = Y1 X X c · P(E− |X = xi E+ )P(X = xi |E+ ) Y1 X c · P(E− |X = xi )P(X = xi |E+ ) c · λY1 (xi )π(x) P c · λY1 (xi ) · P(X = xi |U = u)πX (u) u Skalar c jest stałą normalizującą (czyt. policzyć po wszystkich xi i znormalizować). Algorytm uaktualniania (Kim-Pearl) Krok 1: 1. Węzeł X otrzymuje polecenie uaktualnić swój stan 2. Węzeł X sprawdza wiadomość od rodzica πU (x) i od potomków λYi (x) 3. Oblicz λ(x) := Y λYi (x) i π(x) := X P(X = xi |U = u)πX (u) u∈states(U ) P(X = xi |E) := λ(xi )π(xi ) + normalizacja Krok 2: propagacja z dołu do góry 1. X czyta wiadomości λ od potomków 5 (4) 2. X oblicza i przekazuje wiadomości do rodzica Y λX (u) = X λ(X)P(X = x|U = u) x∈states(X) 3. Uwaga: to jest kolekcja wiadomości liczona dla możliwych stanów rodzica: u1 , u2 , u3 ... Krok 3: propagacja z góry na dół 1. X oblicza wiadomości pi dla swoich synów Y1 , Y2 , ...Yk 2. dla syna Yj πYj (x) := π(x) Y λYl (x) + normalizacja l6=j Warunki brzegowe: • dla wierzchołków z wiedzą: dla xi zgodnych z wiedzą λ(xi ) = 1 dla pozostałych xj λ(xj ) = 0 • dla liści bez wiedzy λ(xi ) = 1 • dla węzłów z wiedzą: dla stanów xi zgodnych z wiedzą π(xi ) = 1 dla pozostałych: π(xi ) = 0 • dla korzenia (jeżeli nie ma wiedzy) π(xi ) = P(xi )z CPT 6 2.4 Wnioskowanie w wielodrzewach Przypadek 3. Poprzez wielodrzewo (polytree) rozumiemy: • graf skierowany acykliczny, • dla każdej pary wierzchołków w grafie istnieje co najwyżej jedna ścieżka między nimi (może nie istnieć żadna), po zapomnieniu orientacji nie ma cykli w grafie, • sieć może mieć kilka różnych „korzeni” (wierzchołki bez rodziców), • wierzchołki mogą mieć wielu rodziców i wiele dzieci (z zastrzeżeniem punktu wyżej). Wierzchołek X może mieć wielu synów Y1 , Y2 , ... oraz rodziców U1 , U2 , .... U1 πX (u1 ) U2 X λX (u3 ) Y1 πY1 (x) λY2 (x) Y2 U3 Nadal pozostaje prawdą: • wiedza E dzieli się na wiedzę ponad X (przyczyny) i poniżej (skutki): E = E + ∪ E − . • X izoluje wiedzę predyktywną i diagnostyczną (każda ścieżka z E + do E − przechodzi przez X) • nadal mamy P(X = xi |E) = P(E− |X = xi ∩ E+ ) · P(X = xi |E+ ) · P(E+ ) P(E+ ∩ E− ) ∝ P(X = xi |E+ )P(E− |X = xi ∩ E+ ) = P(X = xi |E+ )P(E− |X = xi ) = π(xi ) · λ(xi ) Przepływ z korzenia do liści • jeżeli w X jest wiedza, to π(xi ) = 1 dla xi zgodnego z wiedza π(xi ) = 0 dla pozostałych xi • jeżeli X nie ma rodziców (UWAGA! w sieci może być kilka takich X, więc unikamy określenia „korzeń”) π(xi ) = P(X = xi ) z CPT • w pozostałych przypadkach (X ma rodziców U1 , ..., Un ): π(x) := P(X =P x|E + ) = P(xi |U1 = u1 , ...Un = un , E+ )P(U1 = u1 , ...Un = un |E+ ) states(u1 ,u2 ,...,un ) P X X = P(xi |u1 , ...un ) · P(U = u1 |E+ ) . . . P(Un = un |E+ ) states(u1 ,u2 ,...,un ) P Qn = P(xi |u1 , ...un ) · i=1 πX (ui ) states(u1 ,u2 ,...,un ) • wiadomości z U do potomków πX (ui ) πX (ui ) := = = = = X P(U = ui |E+ ) 1 jeżeli w U jest wiedza, lub... π(ui ) · λ(ui ) + normalizacja X π(ui ) · P(U =Q ui |E+ ) // wiedza ponad X i poniżej U π(u) λW (u) W ∈children(U ),W 6=X 7 Przepływ z liści do korzenia: • wsparcie diagnostyczne mnożymy po wszystkich potomkach: – jeżeli w X jest wiedza, to λ(xi ) = 1 dla xi zgodnego z wiedza λ(xi ) = 0 dla pozostałychxi – jeżeli X jest liściem, to λ(xi ) = 1 – w pozostałych wypadkach (mnożymy po Y -ach, potomkach X) λ(x) := = = = P(E− |X = x) Yk Y1 |X = x) , ..., E− P(E− Yk Y1 |X = x) |X = x ) · . . . · P(E− P(E k Q − λYi (x) i • tym razem wiadomości od X do rodzica U λX (u) zależą również od pozostałych rodziców W1 , W2 ... λY (x) Y := P(EP − |X = x) Y = P(E− |X = x, Y = y) · P(Y = y|X = x) y∈states(Y ) ! = P Y P(E− |X P = x, Y = y) · y∈states(Y ) P(Y = y, w1 , w2 ..|X = x) states(w1 ,w2 ,...) ! = P Y |X = x, Y = y) · P(E− P states(w1 ,w2 ,...) y∈states(Y ) = P Y Y ) ) · . . . · P(wk |E+ P(Y = y|X = x, w1 , w2 ..)P(w1 |E+ states(w1 ,w2 ,...) ! P Q (P(y|x, w1 , w2 , ...) i πY (wi )) Y |Y = y) · P(E− y∈states(Y ) = P λ(y) y∈states(Y ) P(Y = y|X = x, w1 , w2 ..)P(w1 , w2 , ...|X = x) ! P states(w1 ,w2 ,...) przy czym: w1 , w2 ... są pozostałymi rodzicami Y , P(y|x, w1 , w2 , ...) — bezpośrednio z tabeli warunkowej Y Uwaga: zależności są skomplikowane: π(u) πX (u) π(x) πY (x) pozostali rodzice X λ(u) λX (u) π(y) pozostali synowie X λ(x) λY (x) λ(y) • wiadomość πX (u) (U → X) powoduje – wysłanie wiadomości πYi (x) do synów X (propagacja w dół drzewa) – wysłanie wiadomości λX ui do pozostałych rodziców X innych niż U (odbicie w górę) – optymalizacja: jeżeli wszystkie wiadomości λYi (x) są równe 1, to nie trzeba odbijać – równoważnie: jeżeli żaden syn X ani jego pośredni potomek nie są w wiedzy, to nie trzeba odbijać – powód: jeżeli nie ma wiedzy w poddrzewie ukorzenionym w X, to wszyscy rodzice Ui są niezależni pod warunkiem X, (wiedza w ustalonym U nie propaguje się do pozostałych) • wiadomość λYi (x) wysłana Y → X – propaguje się w górę drzewa do wszystkich rodziców X jako λX (ui ) – odbija się do pozostałych braci Yj jako πYj (x) • nie ma sensu propagować wiadomości jeżeli w docelowym węźle jest już wiedza • propagowanie w pustej sieci bez wiedzy: wysyłamy π z korzeni sieci (nie ma nigdzie wiedzy zatem nie propagujemy λ) • po zainstancjonowaniu wierzchołka X wysyłamy z X wiadomości λ do rodziców i wiadomości π do synów 8 Algorytm Kim-Pearl Sformułowanie za [1]. funkcja Inicjalizacja(): 1. inicjalizacja odbywa się bez wiedzy, 2. przypisz wszędzie λ(∗) = 1, π(∗) = 1, 3. w węzłach bez rodziców: pi(xi ) = P(X = xi ) (wartość z CPT), 4. dla wszystkich węzłów bez rodziców: wyślij pi do każdego syna (bez odbijania λ, bo nie ma wiedzy). funkcja Wyślij π(X, Y ) 1. przygotuj wiadomości: Y πY (x) := π(x) λW (x) W ∈children(X),W 6=Y dla wszystkich stanów x 2. jeżeli w Y nie ma wiedzy, to dodatkowo (a) oblicz X π(y) := P(yi |x1 , ...xn ) · n Y πY (xi ) i=1 states(x1 ,x2 ,...,xn ) (b) przypisz P(Y = yi |E) := π(yi ) · λ(yi ) + normalizacja (c) dla wszystkich dzieci Z, wyślij π(Y, Z), 3. Jeżeli Y jest zainicjalizowany lub jakikolwiek pośredni potomek Y jest zainicjalizowany, 4. równoważnie: jeżeli λ(yi ) 6= 1 dla jakiegokolwiek stanu yi (a) dla wszystkich węzłów W — W jest rodzicem Y i W 6= X wykonaj funkcję wyślij λ(Y, W ); funkcja wyślij λ(Y, X) 1. Oblicz wiadomość λ: λY (x) := X ! X P(y|x, w1 , w2 , ...) u Y πY (wi ) λ(y) i states(w1 ,w2 ,...) 2. Oblicz: Y λ(x) := λYi (x) Yi ∈children(X) 3. przypisz P(Y = yi |E) := π(yi ) · λ(yi ) + normalizacja 4. dla każdego U rodzica węzła X: jeżeli U nie zawiera wiedzy to wyślij λ(X, U ) 5. dla każdego W syna węzła X (brata węzła Y ): jeżeli W 6= Y to wyślij π(X, W ) funkcja uaktualnij(X, xi ) 1. // ta funkcja uaktualnia prawdopodobieństwa, po ustaleniu wiedzy X = xi 2. przypisz π(xi ) := λ(xi ) := P(X = xi |E) := 1 3. dla pozostałych stanów xj π(xj ) := λ(xj ) := P(X = xj |E) := 0 4. dla wszystkich węzłów U — rodziców X, w których nie ma wiedzy wykonaj wyślij λ(X,U) 5. dla wszystkich węzłów Y — synów X: wyślij π(X,Y) 9 2.4.1 Uwagi • wiadomość nie odbija się po tej samej krawędzi, z której przyszła, • jeżeli w sieci nie ma cyklu (rozumianego jako cykl po zapomnieniu orientacji krawędzi) to propagacja zawsze dojdzie do „liścia” (rozumianego jako: liczba synów + liczba rodziców = 1)i tam wygaśnie, zatem algorytm kiedyś się zakończy • UWAGA! Jeżeli w sieci są dwie różne ścieżki między A i B (po zapomnieniu orientacji krawędzi istnieje cykl), to – propagacja π z A do B może odbić się od B jako λ, – jako λ wrócić do A drugą ścieżką, – odbić się od A jako π, – podążać do B znowu pierwszą ścieżką, Powstaje cykl, algorytm się zapętla. Literatura [1] R. Neapolitan, Learning bayesian networks, Pearspon Prentice Hall, Upper Saddle River, New Jersey 2004. [2] P. Judea, Probabilistic reasoning and intelligent systems. Networks of plausible inference, Morgan Kaufman Inc. 1998. 10