蒙特卡洛积分——采样方法

news2024/10/6 12:28:38

蒙特卡洛积分

  • 目的: 通过计算机进行采样近似求解复杂的积分
  • 理论基础: 大数定律,当 n n n足够大时, X X X的均值将收敛于它的期望(不严谨表述)
  • 一般形式: θ = ∫ a b f ( x ) d x = ∫ a b f ( x ) p ( x ) p ( x ) d x ≈ 1 n ∑ i = 1 n 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=1}^{n}\frac{f(x_i)}{p(x_i)} θ=abf(x)dx=abp(x)f(x)p(x)dxn1i=1np(xi)f(xi) p ( x ) p(x) p(x) x x x的概率密度, p ( x i ) p(x_i) p(xi)为从 x x x的概率分布 p ( x i ) p(x_i) p(xi)中随机采样得到的第 i i i个样本,然而,当 p ( x ) p(x) p(x)是一个比较复杂的概率密度时,从 p ( x ) p(x) p(x)中随机采样并不容易,那么我们现在的问题就转化为了"如何采样出 x x x的分布 p ( x ) p(x) p(x)对应的若干个样本"
  • 重点强调一下,我们所说的采样指的是对 x x x采样,而 p ( x ) p(x) p(x) x x x的概率密度,影响每一个 x x x被采样到的概率

概率分布采样

  • 虽然对于复杂分布 p ( x ) p(x) p(x)而言,采样是一件困难的事情,但在计算机中, 得到一个均匀分布 U ( 0 , 1 ) U(0,1) U(0,1)上的随机数是很简单的, 因此,我们自然而然的会想要通过这个简单的均匀分布来解决我们的问题。

离散型随机变量情形

  • 我们这里用 θ \theta θ表示服从 U ( 0 , 1 ) U(0,1) U(0,1)的随机变量. 现在我们就探讨如何通过对服从 U ( 0 , 1 ) U(0,1) U(0,1)的随机变量 θ \theta θ采样,来得到我们想要的服从其它离散分布的随机变量 X X X的样本.
  • 设有一个离散型随机变量 X ∼ ( x 1 x 2 ⋯ x n p 1 p 2 ⋯ p n ) X\sim\left( \begin{array}{ccc} x_1&x_2&\cdots&x_n\\ p_1&p_2&\cdots&p_n \end{array} \right) X(x1p1x2p2xnpn) X X X θ \theta θ之间存在如下映射关系 X = G ( θ ) X=G(\theta) X=G(θ)
  • 由于 θ \theta θ恰好服从 U ( 0 , 1 ) U(0,1) U(0,1),因此,我们只需要将 θ \theta θ依概率映射到
    样本空间 X X X中每个值即可,即 X = G ( θ ) = { x 1 0 ≤ θ < p 1 x 2 p 1 ≤ θ < p 1 + p 2 ⋯ ⋯ x n ∑ 1 n − 1 p i ≤ θ < 1 X=G(\theta)=\left\{ \begin{array}{c} x_1&0\le\theta<p_1 \\ x_2 &p_1\le\theta<p_1+p_2 \\ \cdots &\cdots\\ x_{n} &\sum_1^{n-1}p_i\le\theta<1 \\ \end{array} \right. X=G(θ)= x1x2xn0θ<p1p1θ<p1+p21n1piθ<1
    其实可以将右边的不等式看作累积分布概率作用下的结果,比如第二行 p 1 ≤ θ < p 1 + p 2 p_1\le\theta<p_1+p_2 p1θ<p1+p2,其实它区间的长度就等于 p 2 + p 1 − p 1 = p 2 p_2+p_1-p_1=p_2 p2+p1p1=p2,也就是 x 2 x_2 x2对应的概率 p 2 p_2 p2
  • 这样就实现了在离散型随机变量的情形之下,找到了服从 U ( 0 , 1 ) U(0,1) U(0,1)的随机变量 θ \theta θ X X X之间的映射关系 G G G,也就可以通过对 θ \theta θ采样的结果转化为对 X X X的采样结果

连续型随机变量情形

  • 在连续型随机变量的情形之下,同样的,我们也探讨如何通过一个服从 U ( 0 , 1 ) U(0,1) U(0,1)的随机变量 θ \theta θ来得到我们想要的服从其它概率分布的随机变量的样本.
  • 设有一个连续型随机变量 X X X,其概率密度为 f ( x ) f(x) f(x),累积分布函数为 F ( x ) F(x) F(x) X X X θ \theta θ之间存在如下映射关系 X = G ( θ ) X=G(\theta) X=G(θ)
  • 由累积分布函数的定义可得 P { X < a } = F ( a ) P\{X<a\}=F(a) P{X<a}=F(a) X = G ( θ ) X=G(\theta) X=G(θ)代入可得 P { G ( θ ) < a } = F ( a ) P\{G(\theta)<a\}=F(a) P{G(θ)<a}=F(a)
  • 由累积分布函数的性质可得, F ( x ) F(x) F(x)为一个单调递增函数,因此,对不等式两边同时取 G G G的反函数可得 P { θ < G − 1 ( a ) } = F ( a ) P\{\theta<G^{-1}(a)\}=F(a) P{θ<G1(a)}=F(a)
  • 又已知 θ \theta θ服从 U ( 0 , 1 ) U(0,1) U(0,1),因此有 P { θ < b } = b , b ∈ [ 0 , 1 ] P\{\theta<b\}=b,b\in[0,1] P{θ<b}=b,b[0,1]
  • b = G − 1 ( a ) b=G^{-1}(a) b=G1(a)可得 P { θ < G − 1 ( a ) } = G − 1 ( a ) P\{\theta<G^{-1}(a)\}=G^{-1}(a) P{θ<G1(a)}=G1(a)
  • 又因为刚才证得 P { θ < G − 1 ( a ) } = F ( a ) P\{\theta<G^{-1}(a)\}=F(a) P{θ<G1(a)}=F(a),所以有 F ( a ) = G − 1 ( a ) F(a)=G^{-1}(a) F(a)=G1(a)
  • 因此 G ( a ) = F − 1 ( a ) G(a)=F^{-1}(a) G(a)=F1(a)
  • 所以 X = G ( θ ) = F − 1 ( θ ) X=G(\theta)=F^{-1}(\theta) X=G(θ)=F1(θ)
  • 根据以上结论,我们可以得出在连续型随机变量的情形下, θ \theta θ与随机变量 X X X的映射关系就是 x x x累积分布函数的反函数

接收—拒绝采样

  • 刚刚介绍了概率分布采样方法,对于连续型随机变量的情形而言,我们可以通过使用随机变量 X X X的的累积分布函数的反函数,也就是如下式子 X = G ( θ ) = F − 1 ( θ ) X=G(\theta)=F^{-1}(\theta) X=G(θ)=F1(θ)来将 θ \theta θ转化为 X X X,但众所周知,累积分布函数是不好求的,尤其是对于复杂的概率密度 p ( x ) p(x) p(x)而言,难以通过积分得到累积分布函数 F ( θ ) F(\theta) F(θ)
  • 对于概率分布不是常见的分布的情况,一个可行的办法是牺牲采样的效率,采用接受-拒绝采样来得到该分布的样本。
  • 现在假设我们想要得到从一个复杂的分布 p ( x ) p(x) p(x)中进行采样,既然 p ( x ) p(x) p(x)太复杂在程序中没法直接采样,那么我设定一个便于程序采样的分布 q ( x ) q(x) q(x),比如高斯分布,然后从 q ( x ) q(x) q(x)中进行采样,并按照一定的方法拒绝某些不合理的样本,以达到接近 p ( x ) p(x) p(x)分布的目的,其中 q ( x ) q(x) q(x)被称为提议分布
    在这里插入图片描述
  • 采样步骤如下:
    • 我们设置一个常量 k k k使得 k q ( x ) kq(x) kq(x)总是在 p ( x ) p(x) p(x)的上方
    • 首先,我们使用概率分布采样方法 q ( x ) q(x) q(x)进行采样,得到一个样本 z 0 z_0 z0
    • 然后,从均匀分布 U ( 0 , 1 ) U(0,1) U(0,1)中随机采样得到一个样本 u 0 u_0 u0
    • 如果 u 0 ≤ p ( z 0 ) k q ( z 0 ) u_0\le\frac{p(z_0)}{kq(z_0)} u0kq(z0)p(z0),那么就接受 z 0 z_0 z0这个样本,否则拒绝这次采样
    • 重复以上过程,得到 n n n个接受的样本 z 0 , z 1 , . . . z n − 1 z_0,z_1,...z_{n−1} z0,z1,...zn1
  • 直观上理解这个采样过程就是:
    • 从均匀分布 U ( 0 , 1 ) U(0,1) U(0,1)中生成一个随机概率 u 0 u_0 u0
    • 由于我们需要近似的概率分布 p ( x ) p(x) p(x)是图中的红色线条,对于我们采集到的样本点 z 0 z_0 z0而言,它有 p ( z 0 ) k q ( z 0 ) \frac{p(z_0)}{kq(z_0)} kq(z0)p(z0)的概率可以被认为是一个合理的样本 p ( z 0 ) k q ( z 0 ) \frac{p(z_0)}{kq(z_0)} kq(z0)p(z0)代表的就是在 x = z 0 x=z_0 x=z0这条竖直的线上 p ( z 0 ) p(z_0) p(z0) k q ( z 0 ) kq(z_0) kq(z0)的比值,可以按几何概率的思想来理解)
    • 随机概率 u 0 u_0 u0如果没有超过 p ( z 0 ) k q ( z 0 ) \frac{p(z_0)}{kq(z_0)} kq(z0)p(z0)这个阈值,则认为这次采样的结果是合理的,并接受 z 0 z_0 z0
  • 总之,通过我们通过提议分布 q ( x ) q(x) q(x),最终采集到的样本为 z 0 , z 1 , . . . z n − 1 z_0,z_1,...z_{n−1} z0,z1,...zn1,我们可以通过这组样本,应用蒙特卡洛方法解决最开始的积分问题 θ = ∫ a b f ( x ) d x = ∫ a b f ( x ) p ( x ) p ( x ) d x ≈ 1 n ∑ i = 1 n f ( z i ) p ( z 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=1}^{n}\frac{f(z_i)}{p(z_i)} θ=abf(x)dx=abp(x)f(x)p(x)dxn1i=1np(zi)f(zi)
  • 但此采样方法的效率深受提议分布的影响,如果提议分布与原始分布相差巨大,那么采样结果被拒绝的概率就会非常高,导致采样的效率低下,同时,对于一些高维的复杂非常见分布 p ( x 1 , x 2 , . . . , x n ) p(x_1,x_2,...,x_n) p(x1,x2,...,xn),我们要找到一个合适的 q ( x ) q(x) q(x) k k k非常困难。

总结

  • 当我们需要求解一个复杂积分时,我们可以对此积分稍作变换 ∫ a b f ( x ) d x = ∫ a b f ( x ) p ( x ) p ( x ) d x \int_a^b{f(x)dx}=\int_a^b{\frac{f(x)}{p(x)}p(x)dx} abf(x)dx=abp(x)f(x)p(x)dx以便于应用蒙特卡洛方法,因为蒙特卡洛方法最重要的思想便是使用均值来逼近期望,这就要求我们抽取一系列的 x x x的样本,然后令 ∫ a b f ( x ) p ( x ) p ( x ) d x ≈ 1 n ∑ i = 1 n f ( x i ) p ( x i ) \int_a^b{\frac{f(x)}{p(x)}p(x)dx}\approx\frac{1}{n}\sum_{i=1}^{n}\frac{f(x_i)}{p(x_i)} abp(x)f(x)p(x)dxn1i=1np(xi)f(xi) 以此来近似积分的结果.
  • 在抽取 x x x的样本的过程中,又出现了新的问题,对于常见的概率分布,我们可以通过概率分布采样方法进行采样,然而对于不常见的分布而言,我们很难积分得到它的累积分布函数,更不必说它的反函数,因此我们又引入了接收—拒绝采样方法,使用提议分布为中介进行采样.

References

  • https://www.cnblogs.com/pinard/p/6625739.html
  • https://zhuanlan.zhihu.com/p/191487550
  • https://zhuanlan.zhihu.com/p/259280292

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/609070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

瑞云科技CTO赵志杰出席广州广告数字创意峰会并发表演讲

3月23日下午&#xff0c;广州广告数字创意峰会暨穗广协企业家大讲堂年度巡礼活动在广州图书馆圆满举行。本次峰会由广州市人民政府统筹&#xff0c;中共广州市委宣传部、广州市文化广电旅游局、中共广州市天河区委、广州市天河区人民政府主办。作为第六届“文创产业大会天河峰会…

go调试工具-delve

go调试工具-delve 简介 go debug工具&#xff0c;专门为go开发的调试工具&#xff0c;并且采用go语言开发&#xff0c;支持多平台。 官网&#xff1a;https://github.com/go-delve/delve 官网有详细的手册&#xff0c;学习起来很方便 快速开始 安装 我本地的go版本 官方…

python的基本知识与面试问题的汇总1

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下python的基本知识与面试问题的汇总&#xff0c;看完之后会对python巩固有很大的帮助哦。 Python中的多线程&#xff1a; 多线程是指在一个程序中同时运行多个线程以提高程序的执行效率。Python中的threading模块…

MongoDB基础实战:CRUD

1 缘起 后台项目使用的数据库是MongoDB&#xff0c; 在一次测试联调过程中&#xff0c;测试同事在测试数据的准确性时&#xff0c; 问我这些数据该怎么查&#xff0c;如何计算验证数据的结果&#xff0c; 我当时&#xff0c;对MongoDB数据操作不熟悉&#xff0c;请教了其他有经…

2. 两数相加解题思路

文章目录 题目解题思路 题目 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&am…

C++11之异常处理

文章目录 一、异常处理的概念二、异常编写的步骤&#xff08;来自图论教育&#xff09;三、栈展开和异常捕获四、C11中noexcep关键字 一、异常处理的概念 异常是程序可能检测到的&#xff0c;运行时不正常的情况&#xff0c;如存储空间耗尽&#xff0c;数组越界&#xff0c;被…

PG提示could not determine data type of parameter $4

目录 场景&#xff1a; 现象&#xff1a; 版本&#xff1a; 分析&#xff1a; 解决方式&#xff1a; 场景&#xff1a; 今天遇到现场环境连接Postgre数据库&#xff0c;日志提示could not determine data type of parameter $4&#xff0c;通过日志复制出完整sql&#xff…

SpringCloudAlibaba:分布式事务之Seata学习

目录 一、分布式事务基础 &#xff08;一&#xff09;事务 &#xff08;二&#xff09;本地事务 &#xff08;三&#xff09;分布式事务 二、Seata概述 1.Seata 的架构包含: 2.其工作原理为: 3.如果需要在 Spring Boot 应用中使用 Seata 进行分布式事务管理,主要步骤为…

Android Jetpack Compose实现轮播图效果

Android Jetpack Compose实现轮播图效果 在最近思索如何使用Compose方式改进我的开源TMDB电影列表应用程序的主屏幕时&#xff0c;一个激动人心的概念浮现在我的脑海中——为什么不整合一个吸引人的轮播图来展示即将上映的电影呢&#xff1f;在本文中&#xff0c;我将分享我的开…

旧改快讯--星河操刀,龙华稳健工业园项目专规获批

龙华街道稳健工业园城市更新单元原列入《2019年深圳市龙华区城市更新单元计划第五批计划》&#xff0c;现已列入《2022年深圳市龙华区城市更新单元计划第三批计划》&#xff0c;现该更新单元规划已经深圳市城市规划委员会法定图则委员会2023年第16次会议审议并获原则通过&#…

python环境安装

测试电脑环境有无安装python&#xff1a; winR&#xff0c;输入cmd&#xff0c;打开窗口&#xff0c;输入pyhton&#xff0c;查看是否有版本号&#xff0c;没有则是没有安装python环境 找到python-3.7.0-amd64的安装包&#xff0c;直接双击启动。上面是快速安装&#xff0c;我…

【Linux驱动】字符设备驱动相关宏 / 函数介绍(module_init、register_chrdev)

驱动运行有两种方式&#xff1a; 方式一&#xff1a;直接编译到内核&#xff0c;Linux内核启动时自动运行驱动程序方式二&#xff1a;编译成模块&#xff0c;使用 insmod 命令加载驱动模块 我们在调试的时候&#xff0c;采用第二种方式是最合适的&#xff0c;每次修改驱动只需…

八大排序之图文详解

前言 在数据结构中&#xff0c;排序是非常重要的内容&#xff0c;也是未来面试和笔试的重点。 本文代码是Java 目录 前言 一、插入排序 &#xff08;一&#xff09;直接插入排序 &#xff08;二&#xff09;希尔排序 二、选择排序 &#xff08;一&#xff09;选择排序 …

【CSS3系列】第六章 · 2D和3D变换

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

通义千问预体验,如何让 AI 模型应用“奔跑”在函数计算上?

立即体验基于函数计算部署通义千问预体验&#xff1a; https://developer.aliyun.com/topic/aigc_fc AIGC 浪潮已来&#xff0c;从文字生成到图片生成&#xff0c;AIGC 的创造力让人惊叹&#xff0c;更多人开始探索如何使用 AI 提高生产效率&#xff0c;激发更多创作潜能&…

android jetpack Room的基本使用(java)

数据库的基本使用 添加依赖 //roomdef room_version "2.5.0"implementation "androidx.room:room-runtime:$room_version"annotationProcessor "androidx.room:room-compiler:$room_version"创建表 Entity表示根据实体类创建数据表&#xff0c…

Linux基础篇 Ubuntu 22.04的环境安装-02

目录 一、资料的获取 二、安装虚拟机 三、安装Ubuntu过程 四、注意事项 一、资料的获取 1.通过官方网站下载 Ubuntu系统下载 | Ubuntuhttps://cn.ubuntu.com/download2.下载桌面板即可 3.选择下载的版本 二、安装虚拟机 1.创建新的虚拟机 2.选择自定义安装 3.硬件兼容性选…

Zinx框架学习 - 请求与路由模块实现

Zinx - V0.3 请求与路由模块实现 在zinxV0.2中链接只封装了套接字&#xff0c;而请求是封装了链接和用户传输的数据&#xff0c;后续通过请求来识别具体要实现什么功能&#xff0c;然后通过路由来完成对应的功能处理。conn链接的业务处理HandleFunc是固定写死的&#xff0c;接…

【YOLO系列】YOLO v4(网络结构图+代码)

文章目录 how to compile on Linux(using cmake)yolo v4 测试 网络结构route 和shotcutNeckHead Loss参考 YOLO v4是YOLO系列的第三篇&#xff0c;YOLO v4融合了大量的检测小技巧&#xff0c;为了能够更快地理解YOLO v4&#xff0c;可先查看前两篇文章。 【YOLO系列】YOLO v3&a…

K8s架构(五)

K8s的物理架构是master/node模式&#xff1a; K8s集群至少需要一个主节点(Master)和多个工作节点(Worker)&#xff0c;Master节点是集群的控制节点&#xff0c;负责整个集群的管理和控制&#xff0c;主节点主要用于暴露API&#xff0c;调度部署和节点的管理。工作节点主要是运…