MCMC基础简说

这篇具有很好参考价值的文章主要介绍了MCMC基础简说。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MCMC是一种随机采样方法, 由两个MC组成,即蒙特卡罗方法(Monte Carlo Simulation,简称MC)和马尔科夫链(Markov Chain ,也简称MC)。

蒙特卡罗

蒙特卡罗是一种随机模拟方法,这里以求积分为例。

MCMC基础简说对于x在区间[a, b]内均匀分布的积分,我们可以在区间内随机采样n点,用n个点坐标均值来模拟代表所有点的值,可以将积分变为求和式:

MCMC基础简说

 可均匀分布只是函数分布的一小部分代表,为了让蒙特卡罗方法适用于更广的范围,我们想引入其他的概率分布模型来使均匀分布对积分式的改变成为特例。假定x在[a, b]的概率分布函数为P(x),定积分求和就可以表示为:

MCMC基础简说

 这样我们就可以将均匀分布变为特例,如P(X)=1/(b-a)就可以和上上图契合。

至此,关键问题来到了函数概率分布函数怎样获得的问题。对于一些常见的概率分布函数的采样还可以通过均匀分布经数式转换得,如高斯分布样本(Z1, Z2)通过均匀分布样本(X1, X2)计算:

MCMC基础简说

 但不常见的函数是更多的,我们又进一步提出接受-拒绝采样方法。

 接受-拒绝采样方法简单的说就是用已知简便的模型包含要采样的函数模型,再通过过滤掉一部分不符合需采样函数的已知模型的值来逼近需采样函数。MCMC基础简说

 设定一个方便采样的常用概率分布函数 q(x),以及一个常量 k,使得p(x) 总在 kq(x) 的下方。随机取样一点x0,对y0进行判断,<=p(x0)才会统计为样本。

问题变为对多维分布蒙特卡罗方法无法求得概率分布,这时便是马尔科夫链登上的时候了。

马尔科夫链

马尔可夫链本身是假设某一时刻状态转移的概率只依赖于它的前一个状态,在一个序列模型下更迭。MCMC基础简说

举一个马尔可夫链模型的具体例子:

MCMC基础简说

 牛市(Bull market), 熊市(Bear market)和横盘(Stagnant market)。各个单元对外指向上的数字代表着该状态转变为另一种状态的可能性,和为1(对内指向没有和为1的限制)。对上图定义状态转移矩阵:矩阵P某一位置P(i,j)的值为P(j|i),即从状态i转化到状态j的概率,并定义牛市为状态0, 熊市为状态1, 横盘为状态2. 

MCMC基础简说

 输入一个初始状态概率分布[0.3, 0.4, 0.3],令其与P相乘则可以得到下一状态的状态概率分布。为什么可以?具体点说就比如0.3x0.9代表着初始为0下一回合也为0的情况,状态转移矩阵就是转变概率,那么下一回合为0的概率就是0.3x0.9+0.4x0.15(初始为1转变为0) +0.3x0.25,对下回合是1或2同理。

import numpy as np

# 初始概率分布
t = np.array([[0.3, 0.4, 0.3]])

# 状态转移矩阵
p = np.array(
    [[0.9, 0.075, 0.025],
    [0.15, 0.8, 0.05],
    [0.25, 0.25, 0.5]]
)

n = 0
# 迭代,得到稳定概率分布
for i in range(1000):
    t = np.dot(t, p)
    n += 1
    print('t{}时刻的状态分布概率为:\n{}'.format(n, t))
    

MCMC基础简说

改变初始概率分布并降低迭代次数为100:

 MCMC基础简说MCMC基础简说

改变初始状态概率分布,可以发现对于同一状态转移矩阵最后都会收敛于一个状态概率分布,我们称其为稳定概率分布。当趋于稳定概率分布后,所取得样本集便可以提供给蒙特卡罗模拟求和。

基于马尔科夫链采样:

1)输入马尔科夫链状态转移矩阵P,设定状态转移次数阈值n1,需要的样本个数n2

2)从任意简单概率分布采样得到初始状态值x0

3)for t=0 to n1+n2−1: 从条件概率分布P(x|xt)中采样得到样本xt+1样本集,(xn1,xn1+1,...,xn1+n2−1)即为我们需要的平稳分布对应的样本集。

参考链接:MCMC(二)马尔科夫链 - 刘建平Pinard - 博客园 (cnblogs.com)

 文章来源地址https://www.toymoban.com/news/detail-451614.html

到了这里,关于MCMC基础简说的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ArcGIS如何自动获得随机采样点?

      本文介绍基于 ArcMap 软件,实现在指定区域 自动 生成 随机点 的方法。   在 GIS 应用中,我们时常需要在研究区域内进行地理数据的随机采样;而采样点的位置往往需要在结合实际情况的前提下,用计算机随机生成。这一操作在 ArcMap 软件中就可以非常方便地进行。  

    2024年02月05日
    浏览(38)
  • PyTorch学习笔记:data.RandomSampler——数据随机采样

    功能:随即对样本进行采样 输入: data_source :被采样的数据集合 replacement :采样策略,如果为 True ,则代表使用替换采样策略,即可重复对一个样本进行采样;如果为 False ,则表示不用替换采样策略,即一个样本最多只能被采一次 num_samples :所采样本的数量,默认采全部

    2023年04月08日
    浏览(36)
  • 贪心算法、贪心搜索/采样(greedy search/sampling)、集束搜索(beam search)、随机采样(random sample)

    贪心算法,又名贪婪法,是寻找 最优解问题 的常用方法,这种方法模式一般将求解过程分成 若干个步骤 ,但每个步骤都应用贪心原则,选取 当前状态下 最好/最优的选择 (局部最有利的选择),并以此希望 最后堆叠出 的结果也是最好/最优的解。{看着这个名字,贪心,贪

    2024年02月15日
    浏览(45)
  • (一)连续随机数的生成-从混合高斯分布中采样

    Example 1 : Mixture of Gaussian distribution Let X 1 ∼ N ( μ 1 , σ 1 2 ) , X 2 ∼ N ( μ 2 , σ 2 2 ) X_1 sim Nleft(mu_1, sigma_1^2right), X_2 sim Nleft(mu_2, sigma_2^2right) X 1 ​ ∼ N ( μ 1 ​ , σ 1 2 ​ ) , X 2 ​ ∼ N ( μ 2 ​ , σ 2 2 ​ ) with σ 1 0 sigma_10 σ 1 ​ 0 and σ 2 0 sigma_20 σ 2 ​ 0 , and let X 1 X_1 X 1 ​

    2024年02月11日
    浏览(39)
  • 基于PCL的RANSAC(随机采样一致)算法简介与示例

    RANSAC(Random sample consensus,随机采样一致)是3D点云拟合的一种重要的手段,可以对直线、圆、平面,圆球、圆柱等形状的点云进行拟合,其优点在于可以最大程度上减少噪声点对拟合效果的影响。 RANSAC各种类型拟合的计算原理基本类似。 1,进行随机抽样,如直线,就随机找

    2024年02月02日
    浏览(47)
  • vue组成部分:前端后端调用方法传参(实操基础版)

    前言     前后端传递信息,POST、Get方法,精简版     在 RestFul API 中,前后端是分离的,后端不在负责视图的渲染,只负责返回指定的前端请求后端 Rest 风格的 API,后端接收到前端的请求之后,会根据请求方法类型,参数执行一些对应的操作。然后返回 JSON 格式的数据给

    2023年04月23日
    浏览(40)
  • Unity 中的随机数的基础常用的随机数生成方法

    在 Unity 中,可以使用 Random 类来生成随机数。以下是一些常用的随机数生成方法: Random.Range(min, max):生成一个在[min, max)范围内的随机整数。 Random.value:生成一个在[0, 1)范围内的随机浮点数。 Random.insideUnitCircle:生成一个在单位圆内的随机二维向量。 Random.insideUnitSphere:生成

    2024年02月20日
    浏览(53)
  • Python —— 将两个列表组成一个字典

    场景: 在不需要遍历的情况下将两个列表组成一个字典 分别有列表A 和 列表B,将列表A作为字典的键,列表B作为字典的值 - zip函数的作用是将可迭代对象中对应的元素给打包成元组并以列表的形式返回 字典创建方法 dict() 能够将这种类型的对象直接转为键值对格式,使用该

    2024年02月11日
    浏览(42)
  • C++基础与深度解析01——函数基本组成+函数传参的三种方法

    请安装Visual Studio 并学习基本的新建项目、新建CPP文件以及运行代码。 函数功能:打印“Hello World” 1.函数构成 输入参数列表+函数名+返回类型+函数主体 如下图所示,但是main函数稍有特殊,其为cpp 现举一个简单函数的例子,z= 2x-3y+3,其中xy均为浮点型小数,取函数名为CalBi

    2024年02月16日
    浏览(46)
  • 并行环境让采样速度快两个量级:Isaac Gym提速强化学习

    仿真环境的 采样速度慢 ,是强化学习的一个瓶颈。例如,论文中常用的 MuJoCo 环境,台式机或服务器的 CPU 上运行仿真环境,一小时大概采集十万或百万步(1e5 或 1e6 步);训练一个智能体(收敛后)需要十多个小时。 加快仿真环境的采样速度,通常有以下方法: 增加并行

    2024年02月16日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包