打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
概率图模型-蒙特卡洛抽样

如果你在数据科学领域还只是个新手,那么建议你先看看——《五本书带你入门数据科学》,入门后,再学习《R语言案例实战》。

目前在连载《概率图模型》,已发布的有:

概率图模型——贝叶斯定理

概率图模型——精准推断

概率图模型——最大似然估计

概率图模型——连续特征参数估计

概率图模型——EM算法

概率图模型——高斯混合模型

在这篇文章里,我们来了解一下,蒙特卡罗抽样方法。之前也写过一些蒙特卡罗方法的应用场景,如下:

计算圆周率π

计算定积分

厕所排队问题

司机越浪,公路越堵?

然后,下面我给大家介绍一下,蒙特卡罗抽样方法。

蒙特卡罗抽样

蒙特卡罗(Monte Carlo)方法是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为基础的数值计算方法。它的核心思想就是使用随机数(或更常见的伪随机数)来解决一些复杂的计算问题。

当所求解问题可以转化为某种随机分布的特征数(比如随机事件出现的概率,或者随机变量的期望值等)时,往往就可以考虑使用蒙特卡洛方法。

通过随机抽样的方法,以随机事件出现的频率估计其概率,或者以抽样的数字特征估算随机变量的数字特征,并将其作为问题的解。这种方法多用于求解复杂的高维积分问题。

实际应用中,我们所要面对的第一个问题就是如何抽样?在统计学中, 抽样(或称采样)是指从目标总体中抽取一部分个体作为样本的过程。

在计算机模拟时,所谓的抽样,是指从一个概率分布中生成观察值(observations)的方法。而这个分布通常使用其概率密度函数(PDF)来表示。其实,在已知PDF的情况下,让计算机自动生成观测值也不是一件容易的事情,因为从本质上来说,计算机只能实现对均匀分布(Uniform distribution)的采样。

逆变换采样(Inverse Transform Sampling)

比较简单的一种情况是,我们可以通过PDF与CDF之间的关系,求出相应的CDF。或者我们根本就不知道PDF,但是知道CDF。此时就可以使用Inverse CDF的方法来进行采样。这种方法又称为逆变换采样(Inverse Transform Sampling)。

如果你对PDF和CDF的概念有点模糊,我们不妨先来一起回顾一下它们的定义。对于随机变量 X,如下定义的函数 F: 

F(x)=P{X≤x},−∞<x<∞

称为 X 的累积分布函数(CDF,Cumulative Distribution Function)。

对于连续型随机变量 X 的累积分布函数 F(x),如果存在一个定义在实数轴上的非负函数 f(x),使得对于任意实数 x,有下式成立: 

则称 f(x) 为 X 的概率密度函数(PDF,Probability Density Function)。

显然,当概率密度函数存在的时候,累积分布函数是概率密度函数的积分。如下图所示,左边的图形,就是标准正态分布的PDF,右边的图形,就是根据标准正态分布函数进行积分得到的CDF。

得到CDF的函数 F(u) 后,对 F(u) 求反函数 F−1(u)。如果想得到 m 个观察值,那么重复下面的步骤 m 次即可:

  • 从均匀分布 Uniform(0,1) 中随机生成一个值,用 u 表示。

  • 计算 F−1(u) 的值 x,则 x 就是从 f(x) 中得出的一个采样点。

逆变换采样案例

假设现在我们希望从下面这个PDF中抽样: 

可以算得相应的CDF为:

对于 u∈[0,1],它的反函数为:

下面使用 R 来实现这个过程。

先来随机生成 10000 个 0 到 1 范围内均匀分布的值。

然后,画出上面 f(x) 的图形。

最后,绘画出模拟抽样的数据:

可以看到,模拟抽样的数据,和原始数据的分布,是非常接近的。

拒绝采样(Reject Sampling)

我们已经看到 Inverse CDF 方法确实有效,但其实它的缺点也是很明显的,那就是有些分布的 CDF 可能很难通过对 PDF 的积分得到,再或者 CDF 的反函数也很不容易求。这时我们就需要用到拒绝采样的方法。

下面这张图很好地阐释了拒绝采样的基本思想。

假设我们想对 PDF 为 p(x) 的函数进行采样,但是由于种种原因(例如这个函数很复杂),对其进行采样是相对困难的。但是另外一个 PDF 为 q(x) 的函数则相对容易采样,例如采用 Inverse CDF 方法可以很容易对对它进行采样,甚至 q(x) 就是一个均匀分布。

那么,当我们将 q(x) 与一个常数 M 相乘之后,可以实现上图所示之关系,即 Mq(x) 将 p(x) 完全“罩住”。 

拒绝采样的步骤如下:

  • 从 q(x) 中获得一个随机采样点 x

  • 对于 x 计算接受概率(acceptance probability)

  • 从 Uniform(0,1) 中随机生成一个值,用 u 表示

  • 如果 α≥u,则接受 x 作为一个来自 p(x) 的采样值,否则就拒绝 x 并回到第一步。

拒绝采样案例

按照拒绝采样的步骤,实现拒绝采样的代码,如下所示:

接着,通过绘图来验证,拒绝采样的结果,是否符合原来数据的分布。

执行代码,即可得到拒绝抽样与原来的数据分布的拟合情况,如下图所示。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python用MCMC马尔科夫链蒙特卡洛、拒绝抽样和Metropolis-Hastings采样算法
如何理解 重要性采样(importance sampling)
流行算法:马尔可夫链蒙特卡洛法(MCMC)
概率图模型(五):近似推断
逆采样(Inverse Sampling)和拒绝采样(Reject Sampling)原理详解
随机过程笔记
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服