蒙特卡洛(Monte Carlo)法是一类随机算法的统称。随着二十世纪电子计算机的出现,蒙特卡洛法已经在诸多领域展现出了超强的能力。在机器学习和自然语言处理技术中,常常被用到的MCMC也是由此发展而来。本文通过蒙特卡洛法最为常见的一种应用——求解定积分,来演示这类算法的核心思想。
欢迎关注白马负金羁的CSDN博客 http://blog.csdn.net/baimafujinji,为保证公式、图表得以正确显示,强烈建议你从该地址上查看原版博文。本博客主要关注方向包括:数字图像处理、算法设计与分析、数据结构、机器学习、数据挖掘、统计分析方法、自然语言处理。
这是本文后续会用到的一个定理。作为一个预备知识,我们首先来介绍一下它。先来看一下维基百科上给出的解释。
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 .
LOTUS到底表达了一件什么事呢?它的意思是:已知随机变量 X 的概率分布,但不知道 g(X) 的分布,此时用LOTUS公式能计算出函数 g(X) 的数学期望。LOTUS的公式如下:
其实就是在计算期望时,用已知的 X 的PDF(或PMF)代替未知的 g(X) 的PDF(或PMF)。
这个方法也常常被用来求 π 值。现在我们用它来求函数的定积分。如下图所示,有一个函数 f(x) ,若要求它从 a 到 b 的定积分,其实就是求曲线下方的面积。这时我们可以用一个比较容易算得面积的矩型罩在函数的积分区间上(假设其面积为 Area )。然后随机地向这个矩形框里面投点,其中落在函数 f(x) 下方的点为绿色,其它点为红色。然后统计绿色点的数量占所有点(红色+绿色)数量的比例为 r ,那么就可以据此估算出函数 f(x) 从 a 到 b 的定积分为 Area×r 。
注意由蒙特卡洛法得出的值并不是一个精确之,而是一个近似值。而且当投点的数量越来越大时,这个近似值也越接近真实值。
下面我们来重点介绍一下利用蒙特卡洛法求定积分的第二种方法——期望法,有时也成为平均值法。
任取一组相互独立、同分布的随机变量 {Xi} , Xi 在 [a,b] 上服从分布律 fX ,也就是说 fX 是随机变量 X 的PDF(或PMF),令 g∗(x)=g(x)fX(x) ,则 g∗(Xi) 也是一组独立同分布的随机变量,而且(因为 g∗(x) 是关于 x 的函数,所以根据LOTUS可得)
假设要计算的积分有如下形式
如果记
如果 a,b 为有限值,那么 fX 可取作为均匀分布:
下面是来自参考文献【1】的一个例子。注意积分的几何意义就是[a,b]区间内曲线下方的面积。
【1】http://www.scratchapixel.com/lessons/mathematics-physics-for-computer-graphics/monte-carlo-methods-in-practice/monte-carlo-integration