常用采样方法

2023-11-05



常用采样方法

最近在学习 MCMC,一种特殊的采样方法,顺便把其他常用的方法了解了一下。

为什么要采样?

很多问题,我们只需要使用数学解析的方法即可解决。例如对 f(x)做积分,如果 f(x) = x^2,那么直接积分就行,很简单。

若f(x)是标准正态分布的概率密度函数(pdf),求[a,b]之间的定积分,那么直接用数学解析方法就搞不定了,因为我们知道正态分布的积分是不可求的。既然无法用解析方法计算精确值,那么退而求其次,不妨寻找一种可以求得近似值的方法。例如:

f(x) = f(x) * g(x) * 1/g(x) = g(x) * (f(x) * 1/g(x))。这里我们找到一个容易采样的 pdf g(x),并对其采样得到{X1…Xn}。连续函数的积分就可以转化为离散值的求和。这被称为蒙特卡洛积分。

从上面例子可以看到,采样方法可以对诸如积分这种无法用解析方法求解的方法进行近似求解。接下来就是问题的核心:怎样采样?

简单采样方法

最简单的抽样是均匀采样,也就是均匀产生[0,1]之间的随机数,编程语言中一般使用 rand()函数。之所以说是均匀采样,是因为这些样本服从均匀分布。随机数的产生,在计算机中一般通过线性同余的方法实现。

另外,一些简单的分布,如正态分布,也可以在均匀采样的基础上实现采样。

对于其他函数我们就无能为力了,只能通过一些高级点的方式进行采样。

接受-拒绝采样

我们需要对一个分布π(x)进行采样,但是却很难直接进行采样,所以我们想通过另外一个容易采样的分布q(x)的样本,用某种机制去除掉一些样本,从而使得剩下的样本就是来自与所求分布f(x)的样本。

条件:

  • 对q(x)采样比较容易
  • q(x)的轮廓接近π(x),且有 π(x)≤Mq(x),∀x

过程:

  • 产生样本X~q(x),和U~Uniform[0,1]
  • Y=U*Mq(x),若Y≤π(X),则接受X,否则拒绝。

解释:

  • 根据 q(x)采样 X,得到 Mq(X),在[0,1]之间产生随机数U,也就是在[0,Mq(X)]产生随机数Y=U*Mq(x)。如果Y 在π(x)曲线下方,那么就选择接受,否则拒绝。为什么呢?在上图两个曲线相隔越远的地方,随机Y在π(x)下方的概率越小,即接受这个采样X的概率越小。这是合理的,这时候两个曲线间隔远, Mq(x)的采样X不能直接用于π(X)。反之,如果两个曲线相隔近,那么U越可能在π(X)下方,越可能接受这个采样,既然曲线相隔近,那么对Mq(x)的采样就可以近似对π(X)的采样了嘛!

但是拒绝采样效率会比较低,因为有很多采样都拒绝了嘛!

重要性采样

如图,如果我们想求积分,也就是面积,且 f(x)不能求积分形式,一种方法就是在[a,b]间均匀采样N 个点,并用 f(Xi)乘以(b-a)/N 即宽度,累加求和就能得到近似的积分值。这里我们用的权重是相同的:(b-a)/N,就是说每个小矩形的宽度都是相等的。

但很多时候,曲线比较高的地方需要多采样并精确刻画,曲线低的地方可以少采样,这样能减小最后结果与真实值之间的误差。如下图:

我们采用与 f(x)类似的 g(x)来采样,g(x)如图中右上角所示。此时宽度怎么确定呢?宽度就是1/g(Xi),这就能体现出不同点的权重不同了。

MCMC采样

上述都是独立性采样,采样的效率还不高。MCMC 是一种关联采样,当前采样有赖于前一个采样结果。MCMC 的全程是马尔可夫蒙特卡罗。马尔可夫,是说前后两个采样结果的关联性。蒙特卡罗是一种随机模拟方法,用采样的方法解决解析问题,如前面提到的蒙特卡洛积分。

若想对π(x)进行采样,首先构建一个马尔可夫链,该马尔可夫链的状态转移矩阵满足特定条件时,会存在一个稳定状态,稳定分布就是π(x)。根据某定律,我们从某个状态出发,在马尔可夫链每步得到的分布中采样,得到 M 个样本,这些样本就近似服从π(x)。要想构建符合条件的状态转移矩阵并抽样,有两种方法:Metropolis-Hastings 算法和Gibbs Sampling方法。具体介绍可参考文末给出的链接。

参考:

http://www.wuhaijia.com/wordpress/%E6%8E%A5%E5%8F%97-%E6%8B%92%E7%BB%9D%E9%87%87%E6%A0%B7%EF%BC%88acceptance-rejection-sampling%EF%BC%89/

http://blog.sina.com.cn/s/blog_4e5740460100cw5b.html

http://www.52nlp.cn/lda-math-mcmc-%E5%92%8C-gibbs-sampling2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

常用采样方法 的相关文章

随机推荐

  • resultType和parameterType的基本使用和区别

    resultType与parameterType的基本使用和区别 Mybatis的Mapper文件中的select insert update delect元素中都有一个parameterType和resultType属性 paramete
  • MQ 入门实践

    MQ Message Queue 消息队列 FIFO 结构 例如电商平台 在用户支付订单后执行对应的操作 优点 异步 削峰 解耦 缺点 增加系统复杂性 数据一致性 可用性 JMS Java Message Service Java消息服务
  • ajax详细用法

    一 基础知识 1 首先让我们了解ajax 通过在后台与服务器进行少量数据交换 AJAX 可以使网页实现异步更新 这意味着可以在不重新加载整个网页的情况下 对网页的某部分进行更新 2 ajax的核心步骤 创建XMLHttpRequest对象
  • Android读取联系人的姓名及电话号码

    Android中联系人的信息是通过ContentProvider来供外部应用获取的 我们使用时只需根据系统联系人ContentProvider的Uri即可获取所需数据 下面讲解如何获取联系人的姓名及电话号码 别的数据如邮箱 照片等数据的获取
  • flutter开发中常用的dart插件

    本文罗列了一些在用flutter进行移动开发时经常会用到的插件 flutter插件官网地址 https pub dartlang org packages 1 image picker 一个可以从图库选择图片 并可以用相机拍摄新照片的flu
  • 关于Java中序列化Serializable的简单注解

    最近学校的实训课程在学习ssm框架 其中有一点实体类里面实现了Serializable序列化的方法 查了一下 仍然有点模糊 序列化和数据库中的字段有关 方便数据存储和传输 import java io Serializable public
  • 计算机专业毕业设计题目大全

    计算机专业毕业设计题目大全 一 ASP类计算机专业毕业设计题目 文章目录 计算机专业毕业设计题目大全 一 ASP类计算机专业毕业设计题目 ASP NET类计算机专业毕业设计题目 Delphi类计算机专业毕业设计题目 JAVA类计算机专业毕业
  • 2020 AI产业图谱启动,勾勒中国AI技术与行业生态

    2020年国务院政府工作报告 提出 重点支持 两新一重 建设 其中 两新一重 中的第一个 新 就是新基建 而人工智能是新基建的重要组成部分 新基建首次被纳入政府工作报告后 各大科技厂商纷纷押注 重金投向 新基建 例如腾讯已经宣布未来五年将投
  • 网络问题导致的github提交失败解决方案

    参考文章 github push过程中的timeout问题 码农家园 1 打开 C Windows System32 drivers etc 下的hosts文件 2 访问 github global ssl Fastly net Serve
  • 质量成本(一致性成本和非一致性成本)

    项目管理知识体系指南第四版 PMBOK2008 8 1 2 2 质量成本 质量成本包括在产品生命周期中为预防不符合要求 为评价产品或服务是否符合要求 以及因未达到要求 而发生的所有成本 质量成本 一致性成本和非一致性成本 一致性成本包括预防
  • 机器学习环境的搭建(miniconda+pycharm)

    一 Python语言环境的安装 miniconda 1 软件安装 直接去官网下载Miniconda速度太慢 建议去清华开源找一个替代的镜像下载 并且在清华该网站上面 还有附带的一些镜像使用帮助 2 anaconda与miniconda的区别
  • STM32CubeMx采集多路ADC

    转载于https blog csdn net qq 24815615 article details 70227385 原文地址https www eemaker com stm32cubemxadc html 单片机为 STM32F103
  • IntelliJ IDEA 好用的插件

    IntelliJ IDEA 好用的插件 1 Maven Helper Maven Helper插件可以方便显示maven的依赖树和方便解决依赖冲突问题 2 Alibaba Java Coding Guidelines Alibaba Jav
  • @FeignClient Get请求、实体参数,自动转POST请求问题

    问题 报错提示不支持POST请求 解决 使用SpringCloud2 1以上版本提供的 SpringQueryMap注解标注在实体对象参数后解决 导入注解包路径 import org springframework cloud openfe
  • lapack安装 matlab,调用 LAPACK 和 BLAS 函数

    将参数从 Fortran 程序传递给 Fortran 函数 您可以从 Fortran MEX 文件中调用 LAPACK 和 BLAS 函数 以下示例使用两个矩阵 并通过调用 BLAS 例程 dgemm 将这两个矩阵相乘 要运行该示例 请将代
  • java生成excel文件并写入数据(附csv)

    写一个超级简单粗暴的小代码了 直接看吧 public static void createxlsFile String filePath String fileName String suffix Map
  • 析构函数详解

    析构函数详解 析构函数的概念 前面通过构造函数的学习 我们知道一个对象是怎么来的 那一个对象又是怎么没呢的 析构函数 与构造函数功能相反 析构函数是完成对象的销毁 局部对象销毁工作是由编译器完成的 而对象在销毁时会自动调用析构函数 完成类的
  • 打砖块游戏实验报告Android,增强学习系列之(三):实现一个打砖块的游戏

    1 Acknowledgement 本篇文章中神经网络的结构主要来自于DeepMind的这篇论文 https www cs toronto edu vmnih docs dqn pdf 2 实现效果 我们要实现的这个游戏 在openai的g
  • 服务器虚拟环境的搭建

    pip 清华镜像 pip install tensorflow i https pypi tuna tsinghua edu cn simple cuda 查看cuda 版本 cat usr local cuda version txt c
  • 常用采样方法

    常用采样方法 最近在学习 MCMC 一种特殊的采样方法 顺便把其他常用的方法了解了一下 为什么要采样 很多问题 我们只需要使用数学解析的方法即可解决 例如对 f x 做积分 如果 f x x 2 那么直接积分就行 很简单 若f x 是标准正