Python贝叶斯推断Metropolis-Hastings(M-H)MCMC采样算法的实现

简介: Python贝叶斯推断Metropolis-Hastings(M-H)MCMC采样算法的实现

Metropolis-Hastings 算法对概率分布进行采样以产生一组与原始分布成比例的轨迹。

首先,目标是什么?MCMC的目标是从某个概率分布中抽取样本,而不需要知道它在任何一点的确切概率。MCMC实现这一目标的方式是在该分布上 "徘徊",使在每个地点花费的时间与分布的概率成正比。如果 "徘徊 "过程设置正确,你可以确保这种比例关系(花费的时间和分布的概率之间)得以实现

为了可视化算法的工作原理,我们在二维中实现它

plt.style.use('ggplot')

首先,让我们创建并绘制任意目标分布

tart = np.append
plt.hist
plt.text

现在让我们写出算法。请注意,我们将原始数据分箱计算给定点的概率。这是算法如何工作的粗略概念

  • 选择分布上的一个随机位置
  • 提议分布上的一个新位置
  • 如果提议的位置比当前的位置有更高的相对概率,就跳到这个位置(即把当前位置设置为新位置)
  • 如果不是,也许还是跳。仍然跳的概率与新位置的概率低多少成正比
  • 返回算法所到过的所有位置
def gees:
    daa = d.astype
    np.bincount # 产生一个范围为(i,i+1)的计数数组
    np.array(\[\])
    
    crnt = int
    for i in xrange(n_ms):
        trs = np.append
        # 最终创建一个函数,选择一个好的跳跃距离
        # 如果当前位置的p很低,就把跳转的距离变大
        poo = int
        # 确保我们不离开边界
        while rood  data.max or ppsd < data.min:
            pood = int
      
        if a > 1:
            cuent = prosed
        else:
            if np.random.random<= a:
                curnt = ppse
traces = get_traces(target, 5000)
# 绘制目标分布图和轨迹分布图
plt.hist
plt.subplot(2,1,2)
plt.hist
plt.tight_layout
plt.show

不仅轨迹的分布非常接近实际分布,样本均值也非常接近。绘制的样本点少于 5000 个,我们非常接近于近似目标分布的形状。


相关文章
|
4天前
|
机器学习/深度学习 数据采集 算法
基于贝叶斯算法的手机垃圾短信过滤
基于贝叶斯算法的手机垃圾短信过滤
|
4天前
|
算法 Python
利用贝叶斯算法对简单应用实现预测分类
利用贝叶斯算法对简单应用实现预测分类
6 0
|
4天前
|
数据采集 编解码 数据挖掘
使用Python进行多次降采样技术
使用Python进行多次降采样技术
13 1
|
4天前
|
存储 机器学习/深度学习 算法
R语言贝叶斯Metropolis-Hastings采样 MCMC算法理解和应用可视化案例
R语言贝叶斯Metropolis-Hastings采样 MCMC算法理解和应用可视化案例
|
4天前
|
算法 数据挖掘 Python
Python贝叶斯MCMC:Metropolis-Hastings、Gibbs抽样、分层模型、收敛性评估
Python贝叶斯MCMC:Metropolis-Hastings、Gibbs抽样、分层模型、收敛性评估
|
4天前
|
Python
Python随机波动性SV模型:贝叶斯推断马尔可夫链蒙特卡洛MCMC分析英镑/美元汇率时间序列数据|数据分享
Python随机波动性SV模型:贝叶斯推断马尔可夫链蒙特卡洛MCMC分析英镑/美元汇率时间序列数据|数据分享
|
4天前
|
数据可视化 索引 Python
数据分享|Python用PyMC3贝叶斯模型平均BMA:采样、信息准则比较和预测可视化灵长类动物的乳汁成分数据
数据分享|Python用PyMC3贝叶斯模型平均BMA:采样、信息准则比较和预测可视化灵长类动物的乳汁成分数据
|
4天前
|
资源调度 数据可视化 数据挖掘
Python用PyMC贝叶斯GLM广义线性模型、NUTS采样器拟合、后验分布可视化
Python用PyMC贝叶斯GLM广义线性模型、NUTS采样器拟合、后验分布可视化
|
4天前
|
算法 数据安全/隐私保护 计算机视觉
基于二维CS-SCHT变换和LABS方法的水印嵌入和提取算法matlab仿真
该内容包括一个算法的运行展示和详细步骤,使用了MATLAB2022a。算法涉及水印嵌入和提取,利用LAB色彩空间可能用于隐藏水印。水印通过二维CS-SCHT变换、低频系数处理和特定解码策略来提取。代码段展示了水印置乱、图像处理(如噪声、旋转、剪切等攻击)以及水印的逆置乱和提取过程。最后,计算并保存了比特率,用于评估水印的稳健性。
|
1天前
|
算法
m基于BP译码算法的LDPC编译码matlab误码率仿真,对比不同的码长
MATLAB 2022a仿真实现了LDPC码的性能分析,展示了不同码长对纠错能力的影响。短码长LDPC码收敛快但纠错能力有限,长码长则提供更强纠错能力但易陷入局部最优。核心代码通过循环进行误码率仿真,根据EsN0计算误比特率,并保存不同码长(12-768)的结果数据。
19 9
m基于BP译码算法的LDPC编译码matlab误码率仿真,对比不同的码长