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