mcmc演算法
Ⅰ mcmc演算法是讓分布最終達到平穩分布嗎
如果一個馬爾科夫鏈滿足 細致平穩條件,則其一定是收斂的,也就是會達到上述的平穩分布。注意:細致平穩條件只是馬爾科夫鏈收斂的充分條件,不是必要條件。
細致平穩條件:,也就是從狀態 轉移到狀態 的數量和從狀態 轉移到狀態 的數量相一致,也就相互抵消,所以數量不發生改變。
Ⅱ 如何在matlab中使用metropolis-hasting演算法
MH演算法也是一種基於模擬的MCMC技術,一個很重要的應用是從給定的概率分布中抽樣。主要原理是構造了一個精妙的Markov鏈,使得該鏈的穩態 是你給定的概率密度。它的好處,不用多說,自然是可以對付數學形式復雜的概率密度。有人說,單維的MH演算法配上Gibbs Sampler幾乎是「無敵」了。今天試驗的過程中發現,MH演算法想用好也還不簡單,裡面的轉移參數設定就不是很好弄。即使用最簡單的高斯漂移項,方差的確定也是個頭疼的問題,需要不同問題不同對待,多試驗幾次。當然你也可以始終選擇「理想」參數。還是拿上次的混合高斯分布來做模擬,模擬次數為500000次的時候,概率分布逼近的程度如下圖。雖然幾個明顯的"峰"已經出來了,但是數值上還是 有很大差異的。估計是我的漂移方差沒有選好。感覺還是inverse sampling好用,迭代次數不用很多,就可以達到相當的逼近程度。
試了一下MH演算法,R Code:
p=function(x,u1,sig1,u2,sig2){
(1/3)*(1/(sqrt(2*pi)*15)*exp(-0.5*(x-70)^2/15^2)+1/(sqrt(2*pi)*11)*exp(-0.5*(x+80)^2/11^2)+1/(sqrt(2*pi)*sig1)*exp(-0.5*(x-u1)^2/sig1^2)+1/(sqrt(2*pi)*sig2)*exp(-0.5*(x-u2)^2/sig2^2))
}
MH=function(x0,n){
x=NULL
x[1] = x0
for (i in 1:n){
x_can= x[i]+rnorm(1,0,3.25)
d= p(x_can,10,30,-10,10)/p(x[i],10,30,-10,10)
alpha= min(1,d)
u=runif(1,0,1)
if (u<alpha){
x[i+1]=x_can}
else{
x[i+1]=x[i]
}
if (round(i/100)==i/100) print(i)
}
x
}
z=MH(10,99999)
z=z[-10000]
a=seq(-100,100,0.2)
plot(density(z),col=1,main='Estimated Density',ylim=c(0,0.02),lty=1)
points(a, p(a,10,30,-10,10),pch='.',col=2,lty=2)
legend(60,0.02,c("True","Sim (MH)"),col=c(1,2),lty=c(1,2))
Ⅲ 貝葉斯的mcmc演算法怎麼在matlab里實現呀 或者gibbs抽樣 求代碼
MATLAB中只有矩陣和cell,如果是想要在matlab里實現
要取出第r行、第c列的矩陣元素用:A(r,c)
要取出第r行、第c列的cell成員用:A{r,c}
Ⅳ 貝葉斯mcmc的matlab程序怎麼寫
%By Shelley from NCUT,April 14th 2011
%Email:[email protected]
%此程序利用貝葉斯分類演算法,首先對兩類樣本進行訓練,
%進而可在屏幕上任意取點,程序可輸出屬於第一類,還是第二類
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
close all
%讀入兩類訓練樣本數據
load data
%求兩類訓練樣本的均值和方差
u1=mean(Sample1);
u2=mean(Sample2);
sigm1=cov(Sample1);
sigm2=cov(Sample2);
%計算兩個樣本的密度函數並顯示
x=-20:0.5:40;
y= -20:0.5:20;
[X,Y] = meshgrid(x,y);
F1 = mvnpdf([X(:),Y(:)],u1,sigm1);
F2 = mvnpdf([X(:),Y(:)],u2,sigm2);
P1=reshape(F1,size(X));
P2=reshape(F2,size(X));
figure(2)
surf(X,Y,P1)
hold on
surf(X,Y,P2)
shading interp
colorbar
title('條件概率密度函數曲線');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%以下為測試部分
%利用ginput隨機選取屏幕上的點(可連續取10個點)
%程序可根據點的位置自動地顯示出屬於那個類
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pw1=0.4;pw2=0.6;
figure(1)
plot(Sample1(:,1),Sample1(:,2),'r.')
hold on
plot(Sample2(:,1),Sample2(:,2),'b.')
for i=1:10
[u,v]=ginput(1);
plot(u,v,'m*');
P1=pw1*mvnpdf([u,v],u1,sigm1);
P2=pw2*mvnpdf([u,v],u2,sigm2);
hold all
if(P1>P2)
disp('it belong to the first class');
else
disp('it belong to the second class');
end;
end
Ⅳ 如何理解貝葉斯估計
根據貝葉斯公式,進行統計推斷,
在垃圾郵件分類方面應用很廣,方法簡單,具有很好的穩定性和健壯性
Ⅵ mcmc在r程序中用哪個軟體包
%By Shelley from NCUT,April 14th 2011 %Email:[email protected] %此程序利用貝葉斯分類演算法,首先對兩類樣本進行訓練, %進而可在屏幕上任意取點,程序可輸出屬於第一類,還是第二類 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear; close all %讀入兩類訓練樣本數據 load data %求兩類訓練樣本的均值和方差 u1=mean(Sample1); u2=mean(Sample2); sigm1=cov(Sample1); sigm2=cov(Sample2); %計算兩個樣本的密度函數並顯示 x=-20:0.5:40; y= -20:0.5:20; [X,Y] = meshgrid(x,y); F1 = mvnpdf([X(:),Y(:)],u1,sigm1); F2 = mvnpdf([X(:),Y(:)],u2,sigm2); P1=reshape(F1,size(X)); P2=reshape(F2,size(X)); figure(2) surf(X,Y,P1) hold on surf(X,Y,P2) shading interp colorbar title('條件概率密度函數曲線'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %以下為測試部分 %利用ginput隨機選取屏幕上的點(可連續取10個點) %程序可根據點的位置自動地顯示出屬於那個類 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% pw1=0.4;pw2=0.6; figure(1) plot(Sample1(:,1),Sample1(:,2),'r.') hold on plot(Sample2(:,1),Sample2(:,2),'b.') for i=1:10 [u,v]=ginput(1); plot(u,v,'m*'); P1=pw1*mvnpdf([u,v],u1,sigm1); P2=pw2*mvnpdf([u,v],u2,sigm2); hold all if(P1>P2) disp('it belong to the first class'); else disp('it belong to the second class'); end; end
Ⅶ 誰能詳細說說Monte Carlo演算法的歷史
權權的《Monte Carlo方法》系列預告出來時我已注意到,但由於近來時間有限而直到今晚才有時間細讀了第一篇《積分方法》。總體而言寫得非常清楚,希望能夠堅持繼續下去。由於整個Bayesian統計學的根基就在Monte Carlo計演算法,我對這個領域一向很感興趣。但由於在研究工作中尚沒有機會使用Bayesian統計學,因此有關的知識都還屬間接經驗,能夠在本論壇探討這個話題肯定會受益。
在點評之前先推薦幾本參考資料,我相信下面這個書單是相當不錯的,可惜本人尚無時間深入鑽研:
* 對英文著作尚有心理障礙者可以參考一本出色的中文教科書:馮康先生所著《數
值計算方法》的第七章《蒙特卡洛方法》(國防工業出版社,1978);
* 一本可讀性極強的英文專著,美國哈佛大學教授Jun Liu所著"Monte Carlo
Strategies in Scientific Computing" (Springer 2002);
* 對Monte Carlo方法在Bayesian統計學中的廣泛應用有興趣者可以適當參考
Andrew Gelman等人所著的"Bayesian Data Analysis" (Second Edition,
2003)之第三部分。
權權將貼子發在物理論壇的目的顯然是強調該方法在物理上的運用,我選擇在數學論壇加以點評是更看重其統計學背景,著重點各有不同。
>> 蒙特卡洛(Monte Carlo)是摩納哥公國一個城鎮,位於地中海沿岸,以其賭場和豪華
>> 酒店而聞名,所以就有了以隨機方法應用於數值計算的一類方法,被稱為Monte Carlo
有關Monte Carlo方法歷史背景的最精確描述來自Jun Liu的專著,他指出一批物理學家在二戰期間為估算薛定諤方程的本徵值而發明了一種基於統計抽樣的數值計演算法,其最初想法歸功於Ulam。後來Ulam的同事Metropolis將該方法命名為Monte Carlo。1950年代Metropolis和幾名統計物理學同事發表了一篇經典論文,提出了Markov Chain Monte Carlo(MCMC)演算法。而MCMC法後來是Bayesian統計學能夠不斷前進的主要動力。
>> I = ∫ f(x)p(x)dx
這里可以強調一下x是個矢量。而這個積分是概率統計中數學期望的基本定義,可以寫成E(f(x))。對於初學者而言,不要忘記概率密度函數p(x)的取值是可以大於1的,歸一化條件是對累積密度函數而言。
>> 上述變換就是Monte Carlo積分的基本精神,因為需要用到隨機抽樣,必然伴隨統計誤差。
需要用到隨機抽樣,其動機是想用數值模擬實驗中的頻率來直接估計一個概率值,而這個概率值是計算許多復雜高維積分的關鍵。而數值模擬需要產生一個序列的隨機數來保證抽樣過程的隨機性。
>> 因為x_i是按照概率密度p(x)分布的隨機變數,f(x_i)也是隨機變數
為了論述的清晰,應該說x_i是一個隨機矢量,那麼f(x_i)就是隨機變數(標量)。
>> 而中心極限定理告訴我們,一組獨立隨機變數之和的概率分布是高斯,其方差等於每一
>> 項隨機變數的方差之和
這里關於「中心極限定理」的表述不夠精確,容易引起讀者混淆,特將Kai-Lai Chung(鍾開萊,我國著名數理統計大師許寶祿先生的弟子)概率論教科書中的定義按我的理解方式用英文轉述一下:
[Central Limit Theorem] For mutually independent (or weakly correlated) random variables X_1, X_2, ..., X_n with mean mu and variance sigma^2,
√n ( Xbar - mu) / sigma --> N(0,1) in distribution,
where N(0,1) stands for standard Gaussian distribution. This means that the distribution shape of Xbar is more and more like a Gaussian random variable as n increases.
權權的中文表述中漏說了這組隨機變數必須來自同一個總體(population)這個重要條件,而且「是高斯」必須改成「在n不斷增大時趨向於高斯分布」。
>> 而計算高維積分時,Monte Carlo 方法是較優的選擇。
權權只從收斂速度的視角來說明Monte Carlo方法在高維情形下的優越性是不夠的,更關鍵的一點是---Monte Carlo模擬結果的精度和概型的維數D無關!結果的精度顯然比收斂速度更為重要,因此Monte Carlo方法特別適合求解高維問題。
另外要指出Monte Carlo方法以O(1/√N)的速度收斂,這在理論上已經無法改善。關鍵要在實際應用中通過巧妙設計模擬概型和改進抽樣方法來降低方差。降低方差的技巧是衡量各種Monte Carlo方法優劣的重要指標。
>> 不妨回顧一下布豐投針實驗來結束本篇,在分布著等距平行木紋的地板上投針,要求
>> 針的長度小於木紋之間的距離,幾何概形計算結果表明,針與一條木紋相交的概率可
>> 以用針的長度、木紋間距和圓周率π表示。而用幾何概形計算概率實質上歸結為面積的
>> 計算,也就是積分的計算,布豐投針實驗可以說是用隨機抽樣計算積分的始祖。
Buffon投針實驗看似簡單,其中蘊含的幾何概型思想值得細細品味。令針的長度為L,木紋間距為S,要求L < S。若針的中點到最近的一條平行線的距離為H,用a表示針與平行線的夾角。顯然有約束條件0 <= H <= S/2 和 0 <= a <= π。為了使針與平行線相交,必須滿足
H <= (L/2) sin(a)
這樣針與平行線相交的概率就是兩塊面積的比值:
p = ∫_0^π (L/2) sin(a) da / (π S/2 ) = 2L / (π S)
這就是權權所說「而用幾何概型計算概率實質上歸結為面積的計算,也就是積分的計算」。倘若上式分子中的積分是一個復雜的高維積分,我們就可以用Monte Carlo方法模擬出的p值來估算它。當然假如我們感興趣的是無理數π值的估算,那麼由上式可推出:
π_hat = lim 2L / (S p_n)
極限中的n趨向於正無窮。
希望權權在接下來的系列文章中能談到以下四種Monte Carlo抽樣方法:
* Crude Sampling
* Acceptance-Rejection Sampling
* Stratified Sampling
* Importance Sampling
若能談及MCMC類方法在統計物理學上的運用則更能引人入勝。
Ⅷ bnt matlab 怎麼做mcmc有向無環貝葉斯網路結構學習
基於matlab的貝葉斯網路工具箱BNT是kevin p.murphy基於matlab語言開發的關於貝葉斯網路學習的開源包,提供了許多貝葉斯網路學習的底層基礎函數庫,支持多種類型的節點(概率分布)、精確推理和近似推理、參數學習及結構學習、靜態模型和動態模型。
貝葉斯網路表示:BNT中使用矩陣方式表示貝葉斯網路,即若節點i到j有一條弧,則對應矩陣中(i,j)值為1,否則為0。
結構學習演算法函數:BNT中提供了較為豐富的結構學習函數,都有:
學習樹擴展貝葉斯網路結構的TANC演算法learn_struct_tan().
2. 數據完整條件下學習一般貝葉斯網路結構的K2演算法learn_struct_k2()、貪婪搜索GS(greedy search)演算法learn_struct_gs()和爬山HC(hill climbing)演算法learn_struct_hc()等。
3. 缺失數據條件下學習一般貝葉斯網路結構的最大期望EM(expectation maximization)演算法learn_struct_EM()和馬爾科夫鏈蒙特卡羅MCMC(Markov Chain Monte Carlo)learn_struct_mcmc()演算法等。
參數學習演算法函數:BNT中也提供了豐富的參數學習函數,都有:
1. 完整數據時,學習參數的方法主要有兩種:最大似然估計learn_params()和貝葉斯方法bayes_update_params();
2. 數據缺失時,如果已知網路拓撲結構,用EM演算法來計算參數,倘若未知網路拓撲結構,使用結構最大期望SEM(structure EM)演算法learn_struct_SEM()。
推理機制及推理引擎:為了提高運算速度,使各種推理演算法能夠有效應用,BNT工具箱採用了引擎機制,不同的引擎根據不同的演算法來完成模型轉換、細化和求解。這個推理過程如下:
BNT中提供了多種推理引擎,都有:
1. 聯合樹推理引擎jtree_inf_engine();
2. 全局聯合樹推理引擎global_joint_inf_engine();
3. 信念傳播推理引擎 belprop_inf_engine();
4. 變數消元推理引擎 var_elim_inf_engine().
Ⅸ 貝葉斯後驗概率演算法有多少種
表達式有無數種
本質是一個
P(A|B)=P(AB)/P(B)
Ⅹ 偏最小二乘法與最小二乘法有什麼區別
一、指代不同
1、偏最小二乘法:夠在自變數存在嚴重多重相關性的條件下進行回歸建模;允許在樣本點個數少於變數個數的條件下進行回歸建模。
2、最小二乘法:通過最小化誤差的平方和尋找數據的最佳函數匹配。利用最小二乘法可以簡便地求得未知的數據,並使得這些求得的數據與實際數據之間誤差的平方和為最小。
二、特點不同
1、偏最小二乘法:在計算方差和協方差時,求和號前面的系數有兩種取法:當樣本點集合是隨機抽取得到時,應該取1/(n-1);如果不是隨機抽取的,這個系數可取1/n。
2、最小二乘法:可用於曲線擬合。其他一些優化問題也可通過最小化能量或最大化熵用最小二乘法來表達。
三、用法不同
1、偏最小二乘法:在自變數的簡單相關系數矩陣中,有某些自變數的相關系數值較大。回歸系數的代數符號與專業知識或一般經驗相反;或者,它同該自變數與y的簡單相關系數符號相反。對重要自變數的回歸系數進行t檢驗,其結果不顯著。
2、最小二乘法:如果預測的變數是連續的,我們稱其為回歸。回歸分析中,如果只包括一個自變數和一個因變數,且二者的關系可用一條直線近似表示,這種回歸分析稱為一元線性回歸分析。