1. 概率分布采样

假如p(z)p(z)p(z)是我们要采样的分布。若可以得到p(z)p(z)p(z)的概率密度pdfpdfpdf,对pdfpdfpdf的求积分得到分布函数cdfcdfcdf
有u(i)u^{(i)}u(i)~U(0,1)U(0,1)U(0,1),即u是(0,1)分布,则取得样本x(i)x^{(i)}x(i)
x(i)=cdf−1(u(i))x^{(i)}=cdf^{-1}(u^{(i)})x(i)=cdf−1(u(i))
图例:假设pdfpdfpdf为高斯分布

对pdfpdfpdf求积分后,得到分布函数cdfcdfcdf,则可求出u(i)u^{(i)}u(i)对应的样本x(i)x^{(i)}x(i)

同理可以抽样出N个样本点x(1)x(2),...,x(N)x^{(1)}x^{(2)},...,x^{(N)}x(1)x(2),...,x(N)
这种抽样方法的缺点是现实中很难得到pdfpdfpdf函数,cdfcdfcdf是求不出来的,所以很难通过这种方法去抽样得到样本点。这种方法只能适用于一些非常有限的分布。

2. Rejection Sampling 接受-拒绝抽样法

p(x)p(x)p(x)是概率密度函数,q(x)q(x)q(x)为proposal distribution即为建议的分布函数

c为q(x)q(x)q(x)前的参数,由于概率密度和为1,所以我们建议的q(x)q(x)q(x)不可能处处大于p(x)p(x)p(x),所以我们在q(x)q(x)q(x)前面乘上一个参数c,使其位于p(x)p(x)p(x)之上,使其满足 ∀xi,cq(xi)≥p(xi)\forall x_i,cq(x_i)\geq p(x_i)∀xi​,cq(xi​)≥p(xi​) 如图所示。
引入q(x)q(x)q(x)的原因是在现实中p(x)p(x)p(x)往往比较复杂,我们无法直接从p(x)p(x)p(x)中采样。而q(x)q(x)q(x)是相对比较简单的分布我们可以直接从里面采样,再看看抽样的样本点是否能够代表p(x)p(x)p(x)。

具体步骤如下:
输入:抽样的目标概率分布的概率密度函数p(x)p(x)p(x);
输出:概率分布的随机样本x1.x2,...,x3x_1.x_2,...,x_3x1​.x2​,...,x3​
参数:样本数n
(1)选择概率密度函数为q(x)q(x)q(x)的概率分布,作为建议分布,使其对任一xxx满足cq(x)≥p(x)cq(x)\geq p(x)cq(x)≥p(x),其中c>0c>0c>0。
(2)按照建议分布q(x)q(x)q(x)随机抽样得到样本x∗x^*x∗,再按照均匀分布在(0,1)范围内抽样得到uuu。
(3)如果u≤p(x∗)cq(x∗)u\leq \frac {p(x^*)}{cq(x^*)}u≤cq(x∗)p(x∗)​,则将x∗x^*x∗作为抽样结果;否则,回到步骤(2)。
【注:解释一下这里u的用处。当p(x)p(x)p(x)和cq(x)cq(x)cq(x)很接近时,也就是图中拒绝域比较窄时,p(x∗)cq(x∗)\frac {p(x^*)}{cq(x^*)}cq(x∗)p(x∗)​比例接近1,这时u在(0,1)中取值满足小于p(x∗)cq(x∗)\frac {p(x^*)}{cq(x^*)}cq(x∗)p(x∗)​的概率比较大,接受率高,抽样效率比较高;而当p(x∗)cq(x∗)\frac {p(x^*)}{cq(x^*)}cq(x∗)p(x∗)​比较小时,就会导致拒绝比例比较高,抽样效率较低。这样做能达到在p(x)p(x)p(x)和cq(x)cq(x)cq(x)接近的地方多抽样,在差异大的地方少抽样的效果。】
(4)直至得到n个随机样本,结束。

接受-拒绝法的优点是容易实现,缺点是效率可能不高。如果p(x)p(x)p(x)的涵盖体积占cq(x)cq(x)cq(x)的涵盖体积的比例很低,就会导致拒绝的比例很高,抽样效率很低。注意,一般是在高维空间进行抽样,即使p(x)p(x)p(x)与cq(x)cq(x)cq(x)很接近,两者涵盖体积的差异也可能很大(与我们在三维空间的直观不同)。

3.重要性抽样法(importance sampling)

Ep(x)[f(x)]=∫p(x)f(x)dxE_{p(x)}[f(x)]=\int p(x)f(x)dxEp(x)​[f(x)]=∫p(x)f(x)dx
=∫p(x)q(x)q(x)f(x)dx=\int \frac {p(x)}{q(x)}q(x)f(x)dx=∫q(x)p(x)​q(x)f(x)dx
=∫f(x)p(x)q(x)q(x)dx,令Wi=p(xi)q(xi)=\int f(x)\frac {p(x)}{q(x)}q(x)dx, 令W_i=\frac {p(x_i)}{q(x_i)}=∫f(x)q(x)p(x)​q(x)dx,令Wi​=q(xi​)p(xi​)​
≈1N∑i=1Nf(xi)Wi\approx \frac 1N \sum_{i=1}^{N} {f(x_i)W_i} ≈N1​i=1∑N​f(xi​)Wi​

p(x)p(x)p(x):概率密度函数
f(x)f(x)f(x):定义在X上的函数
Ep(x)[f(x)]E_{p(x)}[f(x)]Ep(x)​[f(x)]:求函数f(x)f(x)f(x)关于密度函数p(x)p(x)p(x)的数学期望
q(x)q(x)q(x):已知分布的概率密度函数,如(0,1)均匀分布
W:重要性权重,表示p(x)p(x)p(x)与q(x)q(x)q(x)的相似程度

以上是重要性抽样的推导公式。值得一提的是,如果是高维空间的随机向量,拒绝采样和重要性采样常常难以寻找合适的参考分布,并且采样效率低下,此时一般使用MCMC。

蒙特卡罗法三种一般抽样方法(直接抽样法、接受-拒绝抽样法、重要性抽样法)相关推荐

  1. 基于 Python 的 8 种常用抽样方法

    抽样是统计学.机器学习中非常重要,也是经常用到的方法,因为大多时候使用全量数据是不现实的,或者根本无法取到.所以我们需要抽样,比如在推断性统计中,我们会经常通过采样的样本数据来推断估计总体的样本. 上 ...

  2. 【小白学习keras教程】十、三种Model Selection方法:k-fold cross-validation,GridSearchCV和RandomizedSearchCV

    @Author:Runsen Model Selection是划分训练集和测试集的手段,下面总结了三种Model Selection方法. k-fold cross-validation using ...

  3. Python实现二叉树的三种深度遍历方法!

    python代码实现了二叉树,这次将会实现二叉树的几种遍历方法,来更好的解析二叉树的结构特点.分别是一种广度遍历,和三种深度遍历方法:先序遍历,中序遍历,后序遍历.下面是代码实现: 1.先序遍历 遍历 ...

  4. php调用mysql库_PHP调用三种数据库的方法(1)

    PHP调用三种数据库的方法(1) 更新时间:2006年10月09日 00:00:00   作者: MySQL是一个小巧灵珑的数据库服务器软件,对于中.小型应用系统是非常理想的.除了支持标准的ANSI ...

  5. 实现两数 交换的三种不同编程方法。

    第一种 即常规方法 借助第三变量 int a = 5,b = 3,c; c = a; a = b; b = c; 第二种 不借助第三变量 int a=5,b=3,c; a = a+b;    //(缺 ...

  6. 常用的分隔符有哪三种_掌握这三种调漂方法,你想怎么钓就怎么钓,再也不用求人...

    调漂对于刚学钓鱼的钓友来说是一件非常头痛的事情,每次钓鱼大部分时间都浪费在调漂上,总是感觉调不好,不是灵了就是钝了!那么问题到底出在哪呢?今天就和大家分享三种针对悬坠钓的调漂方法,看懂弄明白了,再也不 ...

  7. Python 三种读文件方法read(), readline(), readlines()及去掉换行符\n

    Python 三种读文件方法read(), readline(), readlines()及去掉换行符\n 首先, 让我们看下数据demo.txt, 就两行数据. 35durant teamGSW 1 ...

  8. OpenCV函数应用:基于二值图像的三种孔洞填充方法记录(附python,C++代码)

    系列文章目录 函数系列: OpenCV函数简记_第一章数字图像的基本概念(邻域,连通,色彩空间) OpenCV函数简记_第二章数字图像的基本操作(图像读写,图像像素获取,图像ROI获取,图像混合,图形 ...

  9. 极低噪声幻像电源如何设计?详细原理图和三种消噪方法拿走不谢

    极低噪声幻像电源如何设计?详细原理图和三种消噪方法拿走不谢 原创 ADI 亚德诺半导体 2022-04-19 11:48 极低噪声幻像电源如何设计?详细原理图和三种消噪方法拿走不谢 Q: 是否可以利用 ...

最新文章

  1. Android上成功实现了蓝牙的一些Profile
  2. python中关于操作时间的方法(一):使用time模块
  3. 解决两台centos虚拟机Telnet服务无法联机的问题
  4. 《互联网+流通——F2R助力传统产业创新与转型》一一第1章 “互联网+”的新时代...
  5. Spark入门(八)之WordCount
  6. 使用 Raspberry Pi 远程桌面
  7. java 如何结束线程_java中,如何安全的结束一个正在运行的线程?
  8. 性价比不高却出到8?华为存在感最低的一个系列再发新机
  9. Python运算符is与==的区别
  10. python中object类的源码在哪里-[Python之路] object类中的特殊方法
  11. sql server 如何在一个数据库中操作另一个数据库中的数据
  12. 统计学基础之卡方检验
  13. 高等代数 北大版 Page 17 推论 证明
  14. 谢烟客-----LNP之PHP C 扩展 (Phalcon)
  15. Linux-CentOS 安装yasm
  16. 快手协议/逆向开发ks协议
  17. Excel替换文本内容的3种操作方法比较
  18. 【计算机原理与接口技术(UNIX)⑱】——并行 I/O 接口 [ 芯片8255A ]
  19. Excel中制作目录的3种方法,你了解几种?
  20. 环信 即时通讯sdk实现客服功能

热门文章

  1. ps转手绘课程眼睛绘制--day03学习笔记
  2. VPS8504B\C微功率隔离电源专用芯片 2.8-6VIN/24V/1A 功率管 替代金升阳模块
  3. python bp神经网络的库_Python_BP神经网络实现
  4. 树莓派系统开发环境配置详细解说
  5. 凯迪仕智能锁完成C轮6亿融资10亿综合授信,开启全球化战略新篇章
  6. matlab 画波特图
  7. Eigen矩阵和向量入门及简要函数说明
  8. 微处理器组成的微型计算机属于,以微处理器为核心组成的微型计算机属于什么...
  9. vue组件的自定义事件
  10. 计算机网络学习笔记第六章(应用层)超详细整理