一文详解蒙特卡洛(Monte Carlo)法及其应用

一文详解蒙特卡洛(Monte Carlo)法及其应用我的机器学习教程「美团」算法工程师带你入门机器学习已经开始更新了,欢迎大家订阅~任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~概述…

大家好,又见面了,我是你们的朋友全栈君。

任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~

一文详解蒙特卡洛(Monte Carlo)法及其应用

 

概述

蒙特卡罗方法是一种计算方法。原理是通过大量随机样本,去了解一个系统,进而得到所要计算的值。
 

它非常强大和灵活,又相当简单易懂,很容易实现。对于许多问题来说,它往往是最简单的计算方法,有时甚至是唯一可行的方法。它诞生于上个世纪40年代美国的”曼哈顿计划”,名字来源于赌城蒙特卡罗,象征概率。

 

π的计算

第一个例子是,如何用蒙特卡罗方法计算圆周率π。正方形内部有一个相切的圆,它们的面积之比是π/4。

一文详解蒙特卡洛(Monte Carlo)法及其应用

一文详解蒙特卡洛(Monte Carlo)法及其应用

现在,在这个正方形内部,随机产生10000个点(即10000个坐标对 (x, y)),计算它们与中心点的距离,从而判断是否落在圆的内部。

一文详解蒙特卡洛(Monte Carlo)法及其应用
如果这些点均匀分布,那么圆内的点应该占到所有点的 π/4,因此将这个比值乘以4,就是π的值。通过R语言脚本随机模拟30000个点,π的估算值与真实值相差0.07%。
 

无意识统计学家法则(Law of the unconscious statistician)

 

这是本文后续会用到的一个定理。作为一个预备知识,我们首先来介绍一下它。先来看一下维基百科上给出的解释。 
In probability theory and statistics, the law of the unconscious statistician (sometimes abbreviated LOTUS) is a theorem used to calculate the 期望值 of a function g(X) of a 随机变量 X when one knows the probability distribution of X but one does not explicitly know the distribution of g(X). The form of the law can depend on the form in which one states the probability distribution of the 随机变量 X.

  • If it is a discrete distribution and one knows its PMF function ƒX (but not ƒg(X)), then the 期望值 of g(X) is
    E[g(X)]=∑xg(x)fX(x)

    where the sum is over all possible values x of X.

  • If it is a continuous distribution and one knows its PDF function ƒX (but not ƒg(X)), then the 期望值 of g(X) is
    E[g(X)]=∫∞−∞g(x)fX(x)dx

LOTUS到底表达了一件什么事呢?它的意思是:已知随机变量X的概率分布,但不知道g(X)的分布,此时用LOTUS公式能计算出函数g(X)的数学期望。LOTUS的公式如下:

  • X是离散分布时
    E[g(X)]=∑xg(x)fX(x)
  • X是连续分布时
    E[g(X)]=∫∞−∞g(x)fX(x)dx

其实就是在计算期望时,用已知的X的PDF(或PMF)代替未知的g(X)的PDF(或PMF)。


蒙特卡洛求定积分(一):投点法

这个方法也常常被用来求π值。现在我们用它来求函数的定积分。如下图所示,有一个函数f(x),若要求它从a到b的定积分,其实就是求曲线下方的面积。这时我们可以用一个比较容易算得面积的矩型罩在函数的积分区间上(假设其面积为Area)。然后随机地向这个矩形框里面投点,其中落在函数f(x)下方的点为绿色,其它点为红色。然后统计绿色点的数量占所有点(红色+绿色)数量的比例为r,那么就可以据此估算出函数f(x)从a到b的定积分为Area×r。

 

一文详解蒙特卡洛(Monte Carlo)法及其应用

 

注意由蒙特卡洛法得出的值并不是一个精确之,而是一个近似值。而且当投点的数量越来越大时,这个近似值也越接近真实值。


蒙特卡洛求定积分(二):期望法

下面我们来重点介绍一下利用蒙特卡洛法求定积分的第二种方法——期望法,有时也成为平均值法。

任取一组相互独立、同分布的随机变量{Xi},Xi在[a,b]上服从分布律fX,也就是说fX是随机变量X的PDF(或PMF),令g∗(x)=g(x)fX(x),则g∗(Xi)也是一组独立同分布的随机变量,而且(因为g∗(x)是关于x的函数,所以根据LOTUS可得) 

E[g∗(Xi)]=∫bag∗(x)fX(x)dx=∫bag(x)dx=I

由强大数定理 

 

Pr(limN→∞1N∑i=1Ng∗(Xi)=I)=1

若选 

 

 

I¯=1N∑i=1Ng∗(Xi)

则I¯依概率1收敛到I。平均值法就用I¯作为I的近似值。

 

 

假设要计算的积分有如下形式

I=∫bag(x)dx

其中被积函数g(x)在区间[a,b]内可积。任意选择一个有简便办法可以进行抽样的概率密度函数fX(x),使其满足下列条件:

 

  1. 当g(x)≠0时,fX(x)≠0(a≤x≤b)
  2. ∫bafX(x)dx=1

如果记 

g∗(x)=⎧⎩⎨⎪⎪g(x)fX(x),0,fX(x)≠0fX(x)=0

那么原积分式可以写成 

 

I=∫bag∗(x)fX(x)dx

因而求积分的步骤是:

 

 

  1. 产生服从分布律fX的随机变量Xi (i=1,2,⋯,N);
  2. 计算均值
    I¯=1N∑i=1Ng∗(Xi)

    并用它作为I的近似值,即I≈I¯。

如果a,b为有限值,那么fX可取作为均匀分布: 

fX(x)=⎧⎩⎨1b−a,0,a≤x≤botherwise

此时原来的积分式变为 

 

I=(b−a)∫bag(x)1b−adx

具体步骤如下:

 

 

  1. 产生[a,b]上的均匀分布随机变量Xi (i=1,2,⋯,N);
  2. 计算均值
    I¯=b−aN∑i=1Ng(Xi)

    并用它作为I的近似值,即I≈I¯。


平均值法的直观解释

下面是来自参考文献【1】的一个例子。注意积分的几何意义就是[a,b]区间内曲线下方的面积。 

一文详解蒙特卡洛(Monte Carlo)法及其应用

当我们在[a,b]之间随机取一点x时,它对应的函数值就是f(x),然后变可以用f(x)×(b−a)来粗略估计曲线下方的面积(也就是积分),当然这种估计(或近似)是非常粗略的。 

 

一文详解蒙特卡洛(Monte Carlo)法及其应用

于是我们想到在[a,b]之间随机取一系列点xi时(xi满足均匀分布),然后把估算出来的面积取平均来作为积分估计的一个更好的近似值。可以想象,如果这样的采样点越来越多,那么对于这个积分的估计也就越来越接近。 

 

一文详解蒙特卡洛(Monte Carlo)法及其应用

按照上面这个思路,我们得到积分公式为 

 

I¯=(b−a)1N∑i=0N−1f(Xi)=1N∑i=0N−1f(Xi)1b−a

注意其中的1b−a就是均匀分布的PMF。这跟我们之前推导出来的蒙特卡洛积分公式是一致的。

 

参考文献

【1】http://www.scratchapixel.com/lessons/mathematics-physics-for-computer-graphics/monte-carlo-methods-in-practice/monte-carlo-integration

 

>>>关于作者

CSDN 博客专家,2019-CSDN百大博主,计算机(机器学习方向)博士在读,业余Kaggle选手,有过美团、腾讯算法工程师经历,目前就职于Amazon AI lab。喜爱分享和知识整合。

关注微信公众号,点击“学习资料”菜单即可获取算法、编程资源以及教学视频,还有免费SSR节点相送哦。其他平台(微信/知乎/B站),欢迎关注同名公众号「图灵的猫」~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/142514.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • eclipse中怎么自动补全_空格键坏了

    eclipse中怎么自动补全_空格键坏了eclipse自动补全及其空格键优化(去除空格自动补全)使用eclipse在创建其他工作区间的时候,想要配置代码自动补全,因为老是忘记,每次都要从网上查找,于是就自己总结一下。选1是代码自动补全,只需将“.”换为“.qwertyuiopasdfghjklzxcvbnm”就行了,看起来很乱,其实还是有规律可循的。(只需将键盘上的26字母按从左到右,从上到下的顺序按一遍就行了。)选2是空格不会自动补全,因为按空格会自动补全,所以有时候特别烦,而网上的大多数解决方法是需要改代码的,就会显得特别麻烦。于是

  • linux wget命令「建议收藏」

    linux wget命令「建议收藏」from:http://wenku.baidu.com/view/0854a222192e45361066f571.htmlWGet使用指南wget是一个从网络上自动下载文件的自由工具。它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理.所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦。wg

  • docker 修改容器时间_jenkins docker持续集成

    docker 修改容器时间_jenkins docker持续集成前言用docker搭建的Jenkins环境时间显示和我们本地时间相差8个小时,需修改容器内部的系统时间查看时间查看系统时间date-R进入docker容器内部,查看容器时间dockere

  • 语音合成技术_ai语音合成软件免费的

    语音合成技术_ai语音合成软件免费的语音合成技术原理语音合成(texttospeech),简称TTS。将文字转化为语音的一种技术,类似于人类的嘴巴,通过不同的音色说出想表达的内容。将计算机自己产生的、或外部输入的文字信息转变为可以听得懂的、流利的汉语口语输出的技术。TTS的基本组成:(1)文本分析对输入文本进行语言学分析(主要模拟人对自然语言的理解过程),逐句进行词汇的、语法的和语义的分析,以确定句子的低层结构和每个字的音素的组成,包括文本的断句、字词切分、多音字的处理、数字的处理、缩略语的处理等。使计算机对输入的文本能完全理解,

    2022年10月21日
  • goland激活码最新-激活码分享

    (goland激活码最新)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlTR0LFTT656-eyJsa…

  • 【Custom Mutator Fuzz】AFL++自定义突变API「建议收藏」

    【Custom Mutator Fuzz】AFL++自定义突变API「建议收藏」前言其实这篇是临时加进来的,因为下一篇文章是libprotobuf+AFL++的内容,所以写的时候需要使用AFL++自定义突变的API,觉得还是需要单独写一篇API的介绍,一共十一个方法,也不是很多,下一篇文章就不再用大篇幅描述API了~编写不易,如果能够帮助到你,希望能够点赞收藏加关注哦Thanks♪(・ω・)ノPS:文章末尾有联系方式,交个朋友吧~本文链接:模糊测试系列往期回顾:【CustomMutatorFuzz】Libprotobuf+LibFuzzerCustomM.

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号