前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MCMC(Markov Chain Monte Carlo)的理解与实践(Python)

MCMC(Markov Chain Monte Carlo)的理解与实践(Python)

作者头像
气象学家
发布2020-07-03 16:11:04
1.3K0
发布2020-07-03 16:11:04
举报
文章被收录于专栏:气象学家气象学家

内容目录:MCMC(Markov Chain Monte Carlo)的理解与实践(Python)

代码语言:javascript
复制
Markov Chain Monte Carlo (MCMC) methods are a class of 
algorithms for sampling from a probability distribution
based on constructing a Markov chain that has the desired 
distribution as its stationary distribution. The state of 
the chain after a number of steps is then used as a sample 
of the desired distribution. The quality of the sample 
improves as a function of the number of steps.


With MCMC, we draw samples from a (simple) proposal 
distribution so that each draw depends only on the state of 
the previous draw (i.e. the samples form a Markov chain,
 θp=θ+Δθ,Δθ∼N(0,σ)θp=θ+Δθ,Δθ∼N(0,σ)).

MCMC(Markov Chain Monte Carlo)用MCMC采样算法实现对Beta 分布的采样

MCMC(Markov Chain Monte Carlo)

首先来看经典的MCMC采样算法:
用MCMC采样算法实现对Beta 分布的采样

关于Beta distribution更详尽的内容请参见 Beta函数与Gamma函数及其与Beta分布的关系。已知Beta distribution的概率密度函数(pdf)为:

代码语言:javascript
复制
import numpy as np
import scipy.special as ss
import matplotlib.pyplot as plt

def beta_s(x, a, b):
    return x**(a-1)*(1-x)**(b-1)
def beta(x, a, b):
    return beta_s(x, a, b)/ss.beta(a, b)

def plot_mcmc(a, b):
    cur = np.random.rand()
    states = [cur]
    for i in range(10**5):
        next, u = np.random.rand()
        if u < np.min((beta_s(next, a, b)/beta_s(cur, a, b), 1)):
            states.append(next)
            cur = next
    x = np.arange(0, 1, .01)
    plt.figure(figsize=(10, 5))
    plt.plot(x, beta(x, a, b), lw=2, label='real dist: a={}, b={}'.format(a, b))
    plt.hist(states[-1000:], 25, normed=True, label='simu mcmc: a={}, b={}'.format(a, b))
    plt.show()

if __name__ == '__main__':
    plot_mcmc(0.1, 0.1)
    plot_mcmc(1, 1)
    plot_mcmc(2, 3)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 气象学家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MCMC(Markov Chain Monte Carlo)
    • 首先来看经典的MCMC采样算法:
      • 用MCMC采样算法实现对Beta 分布的采样
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档