Gibbs sampling
Gibbs sampling(吉布斯采樣)(資料集合)
維基百科,自由的百科全書:
In statistics, Gibbs sampling or a Gibbs sampler is a Markov chain Monte Carlo (MCMC) algorithm for obtaining a sequence of observations which are approximated from a specified multivariate probability distribution, when direct sampling is difficult. This sequence can be used to approximate the joint distribution (e.g., to generate a histogram of the distribution); to approximate the marginal distribution of one of the variables, or some subset of the variables (for example, the unknown parameters or latent variables); or to compute an integral (such as the expected value of one of the variables). Typically, some of the variables correspond to observations whose values are known, and hence do not need to be sampled.
在統(tǒng)計學上,吉布斯取樣或吉布斯取樣器是馬爾科夫鏈蒙特卡羅(MCMC)算法,用于獲得從特定的多變量 概率分布近似的觀測序列,當直接取樣困難時。該序列可用于近似聯(lián)合分布(例如,生成分布的直方圖); 近似一個變量的邊際分布,或變量的一些子集(例如,未知參數或潛在變量); 或以計算積分(如預期值的變量之一的)。通常,一些變量對應于其值是已知的觀察值,因此不需要進行采樣。Gibbs抽樣是常用的一種手段統(tǒng)計推斷,特別是貝葉斯推理。它是一種隨機算法(即使用隨機數的算法),并且是用于統(tǒng)計推斷的確定性算法的替代,例如期望最大化算法(EM)。如同其它MCMC算法,Gibbs抽樣產生馬爾可夫鏈樣品,其中的每一個的相關性與附近的樣品。因此,如果需要獨立的樣品,則必須小心(通常通過僅取每個第n個值,例如每100個值)稀釋所得到的樣品鏈。此外,從鏈的開始(老化期)開始的樣本可能不能準確地表示所需的分布。
?
MCMC是用于構建 Markov chain隨機概率分布的抽樣的一類算法。MCMC有很多算法,其中比較流行的是Metropolis-Hastings Algorithm,Gibbs Sampling是Metropolis-Hastings Algorithm的一種特殊情況。
Markov chain 是一組事件的集合,在這個集合中,事件是一個接一個發(fā)生的,并且下一個事件的發(fā)生,只由當前發(fā)生的事件決定。用數學符號表示就是:
A={ a1,a2 … ai, ai+1,… at }
P(ai+1| a1,a2,…ai) = P(ai+1| ai)
這里的ai不一定是一個數字,它有可能是一個向量,或者一個矩陣,例如我們比較感興趣的問題里ai=(g, u, b)這里g表示基因的效應,u表示環(huán)境效應,b表示固定效應,假設我們研究的一個群體,g,u,b的聯(lián)合分布用π(a)表示。事實上,我們研究QTL,就是要找到π(a),但是有時候π(a)并不是那么好找的,特別是我們要估計的a的參數的個數多于研究的個體數的時候。用一般的least square往往效果不是那么好。
解決方案:
用一種叫Markov chain Monte Carlo (MCMC)的方法產生Markov chain,產生的Markov chain{a1,a2 … ai, ai+1,… at }具有如下性質:當t 很大時,比如10000,那么at ~ π(a),這樣的話如果我們產生一個markov chain:{a1,a2 … ai, ai+1,… a10000},那么我們取后面9000個樣本的平均?a_hat = (g_hat,u_hat,b_hat) = ∑ai / 9000 (i=1001,1002, … 10000)這里g_hat, u_hat, b_hat 就是基因效應,環(huán)境效應,以及固定效應的估計值
MCMC算法的關鍵是兩個函數:
1) q(ai, ai+1),這個函數決定怎么基于ai得到ai+1
2) α(ai, ai+1),這個函數決定得到的ai+1是否保留
目的是使得at的分布收斂于π(a)
Gibbs Sampling的算法:
一般來說我們通常不知道π(a),但我們可以得到p(g | u , b),p(u | g , b), p ( b | g, u )即三個變量的posterior distribution
Step1: 給g, u, b 賦初始值:(g0,u0,b0)
Step2: 利用p (g | u0, b0) 產生g1
Step3: 利用p (u | g1, b0) 產生u1
Step4: 利用p (b | g1, u1) 產生b1
Step5: 重復step2~step5 這樣我們就可以得到一個markov chain {a1,a2 … ai, ai+1,… at}
這里的q(ai, ai+1)= p(g | u , b)* p(u | g , b)* p ( b | g, u )
For Example:
這里通俗點的解釋一下。首先,什么是sampling.sampling就是以一定的概率分布,看發(fā)生什么事件.舉一個例子.甲只能E:吃飯、學習、打球,時間T:上午、下午、晚上,天氣W:晴朗、刮風、下雨。現在要一個sample,這個sample可以是:打球+下午+晴朗..
問題是我們不知道p(E,T,W),或者說,不知道三件事的聯(lián)合分布.當然,如果知道的話,就沒有必要用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到的單元,是逼近聯(lián)合分布的.
轉載于:https://www.cnblogs.com/daneres/p/6732887.html
總結
以上是生活随笔為你收集整理的Gibbs sampling的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 修复使用codeXmlDocument/
- 下一篇: BZOJ 2303 方格染色(带权并查集