采样-MH采样

https://www.bilibili.com/video/BV17D4y1o7J2
wiki
https://en.wikipedia.org/wiki/Metropolis–Hastings_algorithm
知乎-介绍了为什么pdf(loc=x_start)的好处
https://www.zhihu.com/question/63305712

1.马尔科夫链MCMC采样

2.问题

有了MCMC采样,但是问题是想要得到对应收敛分布的转移矩阵P如何求得?

2.1 细致平稳条件

π(i)P(i,j)=π(j)P(j,i)
π(x)i,πi(x),,xX,A,B,C,0.5,0.3,0.2,πi("A")=0.5iX="A",πi(x),[0.5,0.3,0.2]
P(i,j)ij

πi(x)P(i,j)=πj(x)P(j,i),ijji
πi,P(i,j),πj(x)P(j,i)

2.2 引入参数α

Q,
πi(x)Q(i,j)πj(x)Q(j,i)
α,
πi(x)Q(i,j)α(i,j)=πj(x)Q(j,i)α(j,i)

α(i,j)=πj(x)Q(j,i)[0,1],α(i,j)ij(P)
α(j,i)=πi(x)Q(i,j)[0,1]
两边即相等
,P(i,j)=Q(i,j)α(i,j)
QP,=P

1.Q,α
2.Q,[0,1],<α,,

2.3 MCMC算法


Qπ(x)n1n2
x0
for t=0 in  n1+n21
a.Q(x|x1)x
b.U[0,1]
c.u<α(x1,x)=π(x)Q(x,xt)xtxxt+1=x
d.t=max{t1,0}

3.MH算法

在前面的MCMC算法中若α过小容易造成采样效率低下,为了解决这个问题MH算法做了优化
,α=min{πj(x)Q(j,i)πi(x)Q(i,j),1}
MCMCα,

4.python MH算法实现

点击查看代码
from scipy.stats import norm

def norm_dist_prob(theta):
    y = norm.pdf(theta, loc=3, scale=2)
    return y

T = 5000
pi = [0 for i in range(T)]
sigma = 1
t = 0
while t < T-1:
    t = t + 1
    pi_star = norm.rvs(loc=pi[t - 1], scale=sigma, size=1, random_state=None)   #状态转移进行随机抽样
    alpha = min(1, (norm_dist_prob(pi_star[0]) / norm_dist_prob(pi[t - 1])))   #alpha值
    u = random.uniform(0, 1)
    if u < alpha:
        pi[t] = pi_star[0]
    else:
        pi[t] = pi[t - 1]


plt.scatter(pi, norm.pdf(pi, loc=3, scale=2),label='Target Distribution')
num_bins = 50
plt.hist(pi, num_bins, normed=1, facecolor='red', alpha=0.7,label='Samples Distribution')
plt.legend()
plt.show()

5.Metropolis 算法

上面的算法其实很难理解,究其原因
1.之前的demo是介绍了离散值情况下的MC采样,这个很好理解,但如果是连续值如何写转移矩阵?
2.norm.rvs(loc=pi[t - 1], scale=sigma, size=1, random_state=None) 代码看不懂,关键是算法没理解
3.代码中没看到乘以矩阵Q的操作,没看懂

对于第一点
,Q(X=|Y=)(pmf)
,(pdf)
,,Q(x|y),,g(x|y),
Qx|y,,y,,y,pdf/pmf,pdf/pmf
再看第二,三点
先看第一个wiki上的介绍
https://en.wikipedia.org/wiki/Random_walk
Q/g,MetropolisQ(x|y)=Q(y|x),g(x|y)=g(y|x),,
wiki原文


A usual choice is to let g(xy)g(xy)be a Gaussian distribution centered at y, so that points closer to y are more likely to be visited next, making the sequence of samples into a random walk [a]. The function g is referred to as the proposal density or jumping distribution.


再抄一段知乎上的(有版权~~~大家自己去看下)
https://www.zhihu.com/question/63305712
从 第三:意外之喜。 这里开始看
wikiMetropolis
MH(Q/g),Q(x|y)=Q(y|x),g(x|y)=g(y|x),MH
α=min(1,πj(x)πi(x))

posted @   筷点雪糕侠  阅读(469)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示