Gibbs Sampling [轉]


1、Sampling初探:

計算機可以使用一種隨機算法來計算圓周率PI,方法是在邊長為d正方形的范圍內不斷地產生隨機數,正方形內切一個直徑為d的圓,設C為落入這個圓內點的個數,S為正方形內所有點的個數,則:

這就是蒙特卡洛法,每次產生的隨機數就是一次Sampling。

2、為什么需要sampling

設進行了10次拋硬幣實驗,結果是HHHHTTTT(H代表正面,T代表反面),已知硬幣正反面是不均勻的,要求估計下一次拋硬幣的結果。

使用最大似然法進行估計:

第一步使用最大似然的原則估計出出現正面的概率:

然后用這個用最大似然估計出來PI的去預測下次出現正反面的結果。

 

使用最大后驗概率原則進行估計:

前面兩種方法都是一種通過最大似然、最大后驗概率計算出一個確定的,然后使用它作為判斷下一次結果的依據。如果考慮PI不是一個確定的數,而是一個分布的情況:

通過對PI積分,考慮的不是一個確定的數,而是一個分布,但是如何算這個積分呢?之前提到的計算圓周率的例子在數學上算法就是積分法,可以通過積分計算出圓的面積,進而得到圓周率,而通過sampling的方法可以計算這個PI,這樣可以避免復雜的積分運算。同樣在這里也可以使用sampling的方法去掉這個積分運算:

通過計算上式就可以避免計算積分。現在需要只是按照一定規則選取:

做馬爾科夫假設,即轉移概率只依賴於前一個狀態:

這就是蒙特卡洛馬爾科夫法。

Gibbs sampling是蒙特卡洛馬爾科夫法的一個特例,即每次抽樣的時候都把最新的結果考慮進去,而不是同步更新

介個就是Gibbs sampling了!

3、sampling實戰

最后我基於Gibbs抽樣的方法實現了一個Naive Bayes分類器,並用最大似然進行參數估計的Naive Bayes分類器進行了對比:

Gibbs 84.1%

MLE    84.6%

實現的代碼地址:http://code.google.com/p/naive-bayes-gibbs-sampling/

 

使用狄利克雷和貝塔分布作為先驗,有很多參數可調,懶得來回調了,使用產生式模型相當於對數據集合加入了先驗知識,當這種先驗知識符合數據分布的時候,會對實驗結果起到正的作用,當先驗知識不符合實際情況時,可能會起到反的作用。

 

 

[轉] http://blog.sina.com.cn/s/blog_8a7a0d5501015bxg.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM