1. 程式人生 > >吉布斯取樣(Gibbs Sampling)及相關演算法

吉布斯取樣(Gibbs Sampling)及相關演算法

幾個可以學習gibbs sampling的方法

1,讀Bishop的Pattern Recognition and Machine Learning,講的很清楚,但是我記得好像沒有例子。
2,讀artificial Intelligence,2、3版,都有。但是我沒讀過。
3,最方便的,查wiki,這個說的最清楚。

這裡通俗點的解釋一下。首先,什麼是sampling。sampling就是以一定的概率分佈,看發生什麼事件。舉一個例子。甲只能E:吃飯、學習、打球,時間T:上午、下午、晚上,天氣W:晴朗、颳風、下雨。現在要一個sample,這個sample可以是:打球+下午+晴朗。。。

問題是我們不知道p(E,T,W),或者說,不知道三件事的聯合分佈。當然,如果知道的話,就沒有必要用gibbs sampling了。但是,我們知道三件事的conditional distribution。也就是說,p(E|T,W),p(T|E,W),p(W|E,T)。現在要做的就是通過這三個已知的條件分佈,再用gibbs sampling的方法,得到joint distribution。


具體方法。首先隨便初始化一個組合,i.e. 學習+晚上+颳風,然後依條件概率改變其中的一個變數。具體說,假設我們知道晚上+颳風,我們給E生成一個變數,比如,學習-》吃飯。我們再依條件概率改下一個變數,根據學習+颳風,把晚上變成上午。類似地,把颳風變成颳風(當然可以變成相同的變數)。這樣學習+晚上+颳風-》吃飯+上午+颳風。

同樣的方法,得到一個序列,每個單元包含三個變數,也就是一個馬爾可夫鏈。然後跳過初始的一定數量的單元(比如100個),然後隔一定的數量取一個單元(比如隔20個取1個)。這樣sample到的單元,是逼近聯合分佈的。
          4. 

MCMC演算法簡介,一個很好的“百度貼吧”帖子