[PGM] Exact Inference for calculating marginal distribution


如何在貝葉斯網絡中求解某變量的邊緣分布?

這是一個問題。


 

貝葉斯網絡如下:

 

CPTs如下

 

 

(1) How to compute p( L | C = high )?


 

   p( L | C = high )

= p(L, C=high) / p(C=high)   // Bayesian Theorem. 

= Joint dist / p(C=high)  // 但是這里需要的卻是joint dist!

 

求 Joint dist,便想到 變量消減,如下:

p( LC)

Σ ... Σ p(H) * p(L) * p(A) * p(V|H,L) * p(S|H,L) * p(C|V) * p(O|V,S) * p(B|O,T) * p(T|A)  // 積分掉與L,C沒任何關系的部分,加和=1

ΣΣV p(H) * p(L) * p(V|H,L) * p(C|V)   // 可見,結果只保留了與L,C有關的部分;因為H,V與L,C有牽扯,所以沒法加和消減掉變量

= p(LΣV p(C|VΣH p(H) * p(V|H,L) 

 

注意:消元的順序不能胡來:

比如p(O|V,S)是可以最終消掉的,但O還作為了p(B|O,T)的條件部分,所以,

  • 先消掉p(B|O,T)  (如果B此時能消,也即是不在其他地方充當條件)
  • 然后才能消O。

之后就是窮舉V, H的過程。 

 

先處理這一個部分: 

ΣH p(H) * p(V|H,L  // 可見,除了H,剩余的兩個變量(V,L)需要窮舉所有離散情況,以便消減掉H

 

1. ΣH p(H) * p(V=low |H,L=true 

2. ΣH p(H) * p(V=high|H,L=true ) = 1 - ΣH p(H) * p(V=low|H,L=true )   // 求出1,即自動得出2

 

3. ΣH p(H) * p(V=low |H,L=false

4. ΣH p(H) * p(V=high|H,L=false) = 1 - ΣH p(H) * p(V=low|H,L=false)   // 求出3,即自動得出4

 

計算過程:

1. ΣH p(H) * p(V=low |H,L=true ) 等價於 p(V=low |L=true )

p(H=true) * p(V=low|H=true,L=true) + p(H=false) * p(V=low |H=false,L=true)   // 變為了可查表的形式

= 0.2 * 0.95 + 0.8 * 0.01

= 0.198

 

2. ΣH p(H) * p(V=high|H,L=true ) 等價於 p(V=high|L=true )

= 1 - ΣH p(H) * p(V=low|H,L=true )

= 1 - 0.198

= 0.802

 

3. ΣH p(H) * p(V=low |H,L=false等價於 p(V=low |L=false)

p(H=true) * p(V=low|H=true,L=false) + p(H=false) * p(V=low |H=false,L=false)   // 變為了可查表的形式

= 0.2 * 0.98 + 0.8 * 0.05

= 0.236

 

4. ΣH p(H) * p(V=high|H,L=false) 等價於 p(V=high|L=false)

= 1 - ΣH p(H) * p(V=low|H,L=false)

= 1 - 0.236

= 0.764

 

 

再處理剩下的部分: 

p(L) * Σv p(C|V) * p(V|L  // 可見,除了V,剩余的兩個變量(C,L)需要窮舉所有離散情況,以便消減掉V

 

1. p(L=true ) * Σv p(C=high|V) * p(V|L=true ) 

2. p(L=false) * Σv p(C=high|V) * p(V|L=false)  // 注意,Σv外有p(L),故不能直接采用補集的方法計算

 

計算過程:

1. p(L=true ) * Σv p(C=high|V) * p(V|L=true ) 等價於 p(L=true, C=high)

= p(L=true ) * p(C=high|V=low ) * p(V=low |L=true)p(L=true ) * p(C=high|V=high) * p(V=high|L=true ) 

= 0.05 * 0.01 * 0.198 + 0.05 * 0.7 * 0.802

= 0.028169

 

2. p(L=false) * Σv p(C=high|V) * p(V|L=false) 等價於 p(L=false, C=high)

= p(L=false) * p(C=high|V=low ) * p(V=low |L=false) + p(L=false) * p(C=high|V=high) * p(V=high|L=false) 

= 0.95 * 0.01 * 0.236 + 0.95 * 0.7 * 0.764

= 0.510302

 

 

Result: 

   pL | C = high )

= p(L, C=high) / { p(C=high) }  // Bayesian Theorem. 

= p(L, C=high) / { p(L=true, C=high) + p(L=false, C=high) }

= p(LC=high) / 0.028169 + 0.510302 }

可見,結果就是Bernoulli distribution with probability with theta = 0.028169/(0.028169 + 0.510302)=0.052312938

 

 

 

(2) Then, compute p( L | C = high ) using the Junction Tree Algorithm. 


 

1. Moralisation

2. Triangulation

得到clique:{A, T}, {O,T,B}, {V, S,O}, {V, C}, {V, H, L, S}

3. Construction of the junction tree

4. Assignment of potentials

ψ(CV)   = P(C|V)
ψ(VSO)  = P(O|V,S)
ψ(VHLS) = P(V|H,L)P(S|H,L)P(H)P(L)
ψ(OTB)  = P(B|O,T)
ψ(TA)   = P(T|A)P(A)
Φ(V) = Φ(VS) = Φ(O) = Φ(T) = 1

 

 根據以下算法更新evidence:

  

  From left to right: 

Φ(V) = 1

Φ*(V) = Σc ψ(CV) = Σc P(C|V) = P(C = high|V)

 

From right to left: 

Φ(T) = 1

Φ*(T) = Σa ψ(TA) = Σa P(T|A)P(A) = P*(T)

 

ψ(OTB) = P(B|O,T)

ψ*(OTB) = ψ(OTB) x Φ*(T)/Φ(T) = ψ(OTB)

 

Φ(O) = 1

Φ*(O) = Σtb ψ(OTB) = Σtb P(B|O,T) = 1

 

ψ(VSO) = P(O|V,S)

ψ*(VSO) = ψ(VSO) x Φ*(O)/Φ(O) = ψ(VSO)

 

Φ(VS) = 1

Φ*(VS) = Σψ(VSO) = ΣP(O|V,S) = 1

 

更新 { V H L S }:

   ψ*(VHLS)

= ψ(VHLS) x { Φ*(V) x Φ*(VS) } / Φ(V) x Φ(VS) }

= P(V|H,L) * P(S|H,L) * P(H) * P(L) * { P(C = high|V) * 1 } / { 1 * 1 }

P(V|H,L) * P(S|H,L) * P(H) * P(L) * P(C = high|V) 

 

注意:我們當下已獲得了置信傳播的一個結果,就是 ψ*(VHLS),消息從左右兩邊都傳遞到了這里。

接下來,我們會如何用這個結果呢?這個結果又能給我們帶來怎樣的好處呢?

 

以下用於下一步的類比參考。

(1)用置信傳播結果表示邊緣條件概率

(2)頭上加了小彎彎表示是已知變量,就是條件部分的變量。

 

照貓畫虎就是如下:

  p(L|C=high)

= p(L,C=high) / p(C=high)  // Bayesian Theorem. 

 

注意這里,分子分母的計算與傳統方法比較時開始發生變化的地方,要體會。

已知:ψ*(VHLS)

分子:ΣVHS ψ*(VHLS)

分母:ΣVHSL ψ*(VHLS)

 

分母:(L這種情況下消不掉)

P(V|H,L) * P(S|H,L) * P(H) * P(L) * P(C = high|V) 

變為:ΣVHL{ P(V|H,L) * P(H) * P(L) * P(C = high|V) 

 

分子:

P(V|H,L) * P(S|H,L) * P(H) * P(L) * P(C = high|V) 

變為:ΣVH P(V|H,L) * P(H) * P(L) * P(C = high|V) 

 

可見,還是變為了窮舉V,H的結果,最終也得到了方案(1)相同的結論。

 

后記:

這個例子可能不太完美,建議自己做一次P(O|H=true, L=true, A=true)。過程當中尤其體會對變量A的處理。

因為A是條件中的變量,所以在方法一中不能消去,這導致了計算資源的浪費;

在方法二中,就沒有這個問題。好運。

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com