蒙特卡罗法三种一般抽样方法(直接抽样法、接受-拒绝抽样法、重要性抽样法)
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} ≈N1i=1∑Nf(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。
蒙特卡罗法三种一般抽样方法(直接抽样法、接受-拒绝抽样法、重要性抽样法)相关推荐
- 基于 Python 的 8 种常用抽样方法
抽样是统计学.机器学习中非常重要,也是经常用到的方法,因为大多时候使用全量数据是不现实的,或者根本无法取到.所以我们需要抽样,比如在推断性统计中,我们会经常通过采样的样本数据来推断估计总体的样本. 上 ...
- 【小白学习keras教程】十、三种Model Selection方法:k-fold cross-validation,GridSearchCV和RandomizedSearchCV
@Author:Runsen Model Selection是划分训练集和测试集的手段,下面总结了三种Model Selection方法. k-fold cross-validation using ...
- Python实现二叉树的三种深度遍历方法!
python代码实现了二叉树,这次将会实现二叉树的几种遍历方法,来更好的解析二叉树的结构特点.分别是一种广度遍历,和三种深度遍历方法:先序遍历,中序遍历,后序遍历.下面是代码实现: 1.先序遍历 遍历 ...
- php调用mysql库_PHP调用三种数据库的方法(1)
PHP调用三种数据库的方法(1) 更新时间:2006年10月09日 00:00:00 作者: MySQL是一个小巧灵珑的数据库服务器软件,对于中.小型应用系统是非常理想的.除了支持标准的ANSI ...
- 实现两数 交换的三种不同编程方法。
第一种 即常规方法 借助第三变量 int a = 5,b = 3,c; c = a; a = b; b = c; 第二种 不借助第三变量 int a=5,b=3,c; a = a+b; //(缺 ...
- 常用的分隔符有哪三种_掌握这三种调漂方法,你想怎么钓就怎么钓,再也不用求人...
调漂对于刚学钓鱼的钓友来说是一件非常头痛的事情,每次钓鱼大部分时间都浪费在调漂上,总是感觉调不好,不是灵了就是钝了!那么问题到底出在哪呢?今天就和大家分享三种针对悬坠钓的调漂方法,看懂弄明白了,再也不 ...
- Python 三种读文件方法read(), readline(), readlines()及去掉换行符\n
Python 三种读文件方法read(), readline(), readlines()及去掉换行符\n 首先, 让我们看下数据demo.txt, 就两行数据. 35durant teamGSW 1 ...
- OpenCV函数应用:基于二值图像的三种孔洞填充方法记录(附python,C++代码)
系列文章目录 函数系列: OpenCV函数简记_第一章数字图像的基本概念(邻域,连通,色彩空间) OpenCV函数简记_第二章数字图像的基本操作(图像读写,图像像素获取,图像ROI获取,图像混合,图形 ...
- 极低噪声幻像电源如何设计?详细原理图和三种消噪方法拿走不谢
极低噪声幻像电源如何设计?详细原理图和三种消噪方法拿走不谢 原创 ADI 亚德诺半导体 2022-04-19 11:48 极低噪声幻像电源如何设计?详细原理图和三种消噪方法拿走不谢 Q: 是否可以利用 ...
最新文章
- Android上成功实现了蓝牙的一些Profile
- python中关于操作时间的方法(一):使用time模块
- 解决两台centos虚拟机Telnet服务无法联机的问题
- 《互联网+流通——F2R助力传统产业创新与转型》一一第1章 “互联网+”的新时代...
- Spark入门(八)之WordCount
- 使用 Raspberry Pi 远程桌面
- java 如何结束线程_java中,如何安全的结束一个正在运行的线程?
- 性价比不高却出到8?华为存在感最低的一个系列再发新机
- Python运算符is与==的区别
- python中object类的源码在哪里-[Python之路] object类中的特殊方法
- sql server 如何在一个数据库中操作另一个数据库中的数据
- 统计学基础之卡方检验
- 高等代数 北大版 Page 17 推论 证明
- 谢烟客-----LNP之PHP C 扩展 (Phalcon)
- Linux-CentOS 安装yasm
- 快手协议/逆向开发ks协议
- Excel替换文本内容的3种操作方法比较
- 【计算机原理与接口技术(UNIX)⑱】——并行 I/O 接口 [ 芯片8255A ]
- Excel中制作目录的3种方法,你了解几种?
- 环信 即时通讯sdk实现客服功能
热门文章
- ps转手绘课程眼睛绘制--day03学习笔记
- VPS8504B\C微功率隔离电源专用芯片 2.8-6VIN/24V/1A 功率管 替代金升阳模块
- python bp神经网络的库_Python_BP神经网络实现
- 树莓派系统开发环境配置详细解说
- 凯迪仕智能锁完成C轮6亿融资10亿综合授信,开启全球化战略新篇章
- matlab 画波特图
- Eigen矩阵和向量入门及简要函数说明
- 微处理器组成的微型计算机属于,以微处理器为核心组成的微型计算机属于什么...
- vue组件的自定义事件
- 计算机网络学习笔记第六章(应用层)超详细整理