蒙特卡洛法

May 25, 2021
机器学习

蒙特卡洛(MonteCarlo)是一大类随机算法(RandomizedAlgorithms)的总称,它们通过随机样本来估算真实值。

估计圆周率 #

假设有一个半径为1,圆心在原点的圆,我们知道它的面积是$\pi$。现在我们随机在$x\in[-1,1], y\in[-1,1]$上随机取一个点,我们知道这个点落在圆内的概率为圆与正方形面积之比:

$$ p = \frac{\pi}{4} $$

假设我们随机选取了n个点,我们可以使用下面的公式判断哪些点位于圆内,假设有m个。

$$ x^2 + y^2 < 1 $$

显然,我们知道m的数学期望是

$$ E[M] = \frac{\pi n}{4} $$

当n很大时, m近似于数学期望,因此有

$$ \begin{aligned} m \approx \frac{\pi n}{4} \\ \pi \approx \frac{4m}{n} \end{aligned} $$

近似求定积分 #

蒙特卡洛求积分的本质是利用随机模拟估计一个随机变量的期望。

假设我们想求定积分:

$$ \int_{a}^{b} f(x) \mathrm{d} x $$

我们可以把它转换成某个随机变量的数学期望,具体如下:

设随机变量$X \sim U[a, b]$,即服从均匀分布,X具有概率密度$p(x)=\frac{1}{b-a}$,那么就有:

$$ E[f(X)] =\int_{a}^{b} p(x)f(x) \mathrm{d} x = \frac{1}{b-a}\int_{a}^{b} f(x) \mathrm{d} x $$

在统计学中,我们知道期望是可以估计的,我们随机取N个$f(x)$的样本,这些样本的平均值可以作为所求期望的近似,即:

$$ E[f(x)] = \frac{\sum_1^Nf(x_i)}{N} = \frac{1}{b-a}\int_{a}^{b} f(x) \mathrm{d} x $$

那么就有:

$$ \int_{a}^{b} f(x) \mathrm{d} x = (b-a)\frac{\sum_1^Nf(x_i)}{N} $$

参考资料 #