MCMC是一种随机采样方法,用来处理一些复杂运算的近似求解。在HMM、LDA等模型中都有重要应用。
下一篇 MCMC详解2——MCMC采样、M-H采样、Gibbs采样


目录

  • 1,蒙特卡洛方法
  • 2,拒绝-接受采样

MCMC( Markov Chain Monte Carlo)马尔科夫蒙特卡洛方法,从名称上包含蒙特卡洛方法与马尔科夫链两部分,本文先总结蒙特卡洛方法。

1,蒙特卡洛方法

最早的蒙特卡洛方法都是为了求解一些不太好求解的求和或者积分问题。

θ = ∫ a b f ( x ) d x \theta=\int_{a}^{b}f(x)dx θ=∫ab​f(x)dx

以上积分是不是很像是连续型数据的概率分布函数?我们这里将他看做一个普通的积分就可以了,如果它真的是,此时 f ( x ) f(x) f(x)就是其概率密度函数,那么 θ \theta θ应该为1,不过这里我们将其视为一个用来求解的复杂函数即可。

如果我们很难求出f(x)的原函数,那么这个积分就很难求得。但是我们可以用蒙特卡洛方法求近似值,公式如下:
θ = ∫ a b f ( x ) d x = ∫ a b f ( x ) p ( x ) p ( x ) d x ≈ 1 n ∑ i = 0 n − 1 f ( x i ) p ( x i ) \theta=\int_{a}^{b}f(x)dx=\int_{a}^{b}\frac{f(x)}{p(x)}p(x)dx\approx\frac{1}{n}\sum_{i=0}^{n-1}\frac{f(x_i)}{p(x_i)} θ=∫ab​f(x)dx=∫ab​p(x)f(x)​p(x)dx≈n1​i=0∑n−1​p(xi​)f(xi​)​
突然看这个公式会有点懵,我们一步步分析。

1)如果用 x 0 x_0 x0​表示 f ( x ) f(x) f(x)上的所有值,来近似表示,那么积分结果为:
( b − a ) f ( x 0 ) (b-a)f(x_0) (b−a)f(x0​)

2)方法1)显然过于粗糙,我们从区间[a,b]中选取n个样本点 x i x_i xi​,用他们的均值来表示 f ( x ) f(x) f(x)的值,那么积分结果为:
b − a n ∑ i = 0 n − 1 f ( x i ) \frac{b-a}{n}\sum_{i=0}^{n-1}f(x_i) nb−a​i=0∑n−1​f(xi​)

3)以上方法都有一个假设:x在区间[a,b]上是均匀分布,这显然是不合理的。f(x)比较复杂,我们假设x在区间[a,b]上符合一个概率密度函数p(x),可以得到如下近似计算公式。
θ = ∫ a b f ( x ) d x = ∫ a b f ( x ) p ( x ) p ( x ) d x ≈ 1 n ∑ i = 0 n − 1 f ( x i ) p ( x i ) \theta=\int_{a}^{b}f(x)dx=\int_{a}^{b}\frac{f(x)}{p(x)}p(x)dx\approx\frac{1}{n}\sum_{i=0}^{n-1}\frac{f(x_i)}{p(x_i)} θ=∫ab​f(x)dx=∫ab​p(x)f(x)​p(x)dx≈n1​i=0∑n−1​p(xi​)f(xi​)​

注:
1)我们假设 p ( x ) p(x) p(x)的存在,完全就是为了得到近似积分。这里是近似值,如果 p ( x ) p(x) p(x)是均匀分布,就变成了方法2),当然如何 f ( x ) f(x) f(x)真的是均匀分布的,结果仍然为1,等式成立。
2)我们没法直接求 f ( x ) f(x) f(x)的积分,只能通过假设x的概率密度函数符合 p ( x ) p(x) p(x)的情况来计算。这里已经把近似概率分布 p ( x ) p(x) p(x)放到了分母的位置,考虑了概率密度分布p(x)的影响,那么积分的式子就是 f ( x i ) p ( x i ) \frac{f(x_i)}{p(x_i)} p(xi​)f(xi​)​基于 p ( x ) p(x) p(x)的期望,那么,我们可以用均值近似,然后转化成采集多个符合 p ( x ) p(x) p(x)的样本,求相应均值的方案。

所以,只要我们知道了概率密度函数p(x),那么就能得到积分的近似结果(一般 p ( x ) p(x) p(x)是可以假设符合某种分布的)。

结论:蒙特卡洛方法将连续积分问题转化为了基于概率密度函数多次采样求期望的问题。

显然这个时候,求解问题的关键就是获得符合概率分布P的样本集,那么如何从概率密度函数 p ( x ) p(x) p(x)上进行采样,得到n个样本呢?

对于常见的均匀分布uniform(0,1)是非常容易采样的,一般通过线性同余发生器可以很方便的生成(0,1)之间的伪随机数样本。其他常见的概率分布都可以通过均匀分布的样本转换得到。但是很多时候我们的概率分布并不是常见的分布,如何采样呢?

2,拒绝-接受采样


步骤:
1)首先设置一个可采样的分布 q ( x ) q(x) q(x)(比如高斯分布),以及一个常量k,使得 p ( x ) p(x) p(x)总在 k q ( x ) kq(x) kq(x)的下方。

2)采样得到 q ( x ) q(x) q(x)的一个样本,然后从均匀分布 ( 0 , k q ( z 0 ) ) (0,kq(z0)) (0,kq(z0))中采样,得到一个值u,如果u落在了灰色区域,则拒接这次抽样,否则接受这个样本 z 0 z_0 z0​,重复以上过程,得到n个样本,然后利用蒙特卡洛方法求解.

注:
可能有些同学不太理解为什么从均匀分布 ( 0 , k q ( z 0 ) ) (0,kq(z_0)) (0,kq(z0​))中采样,落在灰色区间就拒绝,否则就接受呢?其实这是概率密度函数的概念问题,p和q都是概率密度函数,其下的面积是概率,一个区域的面积可以表示概率分布,从均匀分布 ( 0 , k q ( z 0 ) ) (0,kq(z_0)) (0,kq(z0​))中采样,其实就是在一定程度上表示该样本点 z 0 z_0 z0​存在p内的概率大小,虽然一个点对于连续型数据分布来讲没有意义,但是在这条线段上的概率大小是可以表示的。

通过拒接—接受采样,可以解决 p ( x ) p(x) p(x)分布不是常见分布的时候,获得样本集,用蒙特卡洛方法求和的目的。但是很多时候该方法不能满足我们的需求得到:
1)一些高维的数据分布,找一个合适的 q ( x ) q(x) q(x)和 k k k比较困难。
2)对于二维分布我们只能得到其条件分布,却很难得到二维分布的一般形式。比如 q ( x , y ) q(x,y) q(x,y),拒绝-接受采样只能改变一个纬度得到条件概率,而马尔科夫链可以有效的找到复杂概率分布的采样样本集。

(本文参考了刘建平老师的博客,加入了一些自己的一些理解,有兴趣的可以去拜读原文)

下一篇 MCMC详解2——MCMC采样、M-H采样、Gibbs采样

MCMC详解1——蒙特卡洛方法相关推荐

  1. MCMC详解2——MCMC采样、M-H采样、Gibbs采样(附代码)

    MCMC是一种随机采样方法,用来处理一些复杂运算的近似求解.在HMM.LDA等模型中都有重要应用. 上一篇 MCMC详解1--蒙特卡洛方法 目录 1,马尔科夫链模型 1.1 马尔科夫链转移矩阵的性质 ...

  2. PHP开发中常见的安全问题详解和解决方法

    PHP开发中常见的安全问题详解和解决方法 参考文章: (1)PHP开发中常见的安全问题详解和解决方法 (2)https://www.cnblogs.com/walblog/articles/83313 ...

  3. linux中date使用方法,linux命令详解date使用方法(计算母亲节和父亲节日期脚本示例)...

    linux命令详解date使用方法(计算母亲节和父亲节日期脚本示例) 发布于 2016-02-07 15:58:40 | 108 次阅读 | 评论: 0 | 来源: 网友投递 LinuxLinux是一 ...

  4. C语言中三个数比较大小详解——三种方法

    ​ C语言中三个数比较大小详解--三种方法 方法一:if-else法 方法二:函数法 方法三:三目运算符法 C语言中比较三个数的大小有很多方法,以下是我总结的三种方法: 首先我定义 int a = 1 ...

  5. csrf漏洞防御方案_CSRF 漏洞原理详解及防御方法

    跨站请求伪造:攻击者可以劫持其他用户进行的一些请求,利用用户身份进行恶意操作. 例如:请求http://x.com/del.php?id=1是一个删除ID为1的账号,但是只有管理员才可以操作,如果攻击 ...

  6. 计算机网络ping所有用法,ping命令详解和使用方法【详解】

    随着科技的发展,计算机的发展也非常快,如今已经进入大部分的家庭之中,成为人们日常生活中必不可少的一个部分.当计算机出现一些小问题,我们就可以通过ping命令来查看电脑出现问题的原因,从而找到解决问题的 ...

  7. findindex遍历 js_详解ES6数组方法find()、findIndex()的总结

    本文主要讲解ES6数组方法find()与findIndex(),关于JS的更多数组方法,可参考以下: 1. find() 该方法主要应用于查找第一个符合条件的数组元素,即返回通过测试(函数内判断)的数 ...

  8. 【搜集】mDNSResponder.exe进程详解和卸载方法

    安装ADOBE CS3后会出现这个进程,或者是一个叫Bonjour的软件. 下面是搜集的进程详解和卸载方法: mDNSResponder.exe 进程文件:mDNSResponder 或者 mDNSR ...

  9. java data使用_@Data注解详解及使用方法-Fun言

    @Data作用 去除Getter,Setter,equals,hashCode,toString方法,@Data注解在类上时,简化java代码编写,为该类提供读写属性.简单来说就是不用再手动添加get ...

最新文章

  1. 阿里云虚拟机mysql_打开虚拟机里mysql
  2. 北上广互联网创业者分布图!
  3. Java Hashtable size()方法与示例
  4. 搜索——滑雪(poj1088)
  5. Python | Numpy核心语法和代码整理汇总!
  6. php读写xml文件,另辟蹊径 搞定PHP读取XML大文件 数据导入
  7. ASC2 E Quantization Problem DP
  8. 移动端如何定义字体font-family
  9. github进不去_app.gitbook.com进不去,一直卡着怎么回事
  10. Vue安装及环境配置、开发工具
  11. Python如何抓取APP数据?抓包工具Fiddler介绍
  12. 秒懂VRRP协议原理及配置
  13. Spring Gateway 报错java.lang.IllegalStateException: COMPLETED 解决
  14. 神仙道玄奇套装材料大全
  15. phalcon蹩脚的面包屑(breadcrumbs)功能
  16. 精彩回顾 | 阿里云APM城市技术行·深圳站
  17. Stylized NeRF 水记(NeRF的风格化)
  18. 51单片机12864坐标轴显示,并实时刷新数proteus实现
  19. UE4从零开始制作数字孪生道路监测平台
  20. MATLAB身份证号码定位检测识别GUI

热门文章

  1. 浅谈立体匹配中的新式应用场景
  2. 脚本进击之汉诺塔tatatata……
  3. 亲,学会ARP攻击原理,请不要冲动
  4. RT-Thread 入门学习笔记 - 解决RT_ASSERT失效的问题
  5. 20221119 今天的世界发生了什么
  6. ICASSP2020:VVC基于线性模型的帧内预测模式
  7. 2022第十三届蓝桥杯省赛B组Python
  8. idea超实用的设置——修改注释颜色、分割线
  9. iOSAPP上架流程详解:如何在Windows开发上架
  10. 一个脚本还你清爽体验