零基础都能理解的蒙德卡洛算法(附实例)
前言
最近的研究项目需要用到马尔可夫链蒙特卡洛算法(Markov Chain Monte Carlo: MCMC),但之前一直不是很明白蒙特卡洛算法的具体原理(很多概率模型直接有调用MCMC的包,所以之前一直不是深入了解过)。前些日子重新认真的学习了一下蒙特卡洛算法,在此配上几个实例讲解一下。
什么是蒙特卡洛?
蒙特卡洛这个名字来源于摩纳哥赌城“蒙特卡洛”(统计学大师Nicholas Metropolis在1947年命名“Monte Carlo method”)。蒙特卡洛是一种统计模拟方法,具体方法是依赖随机样本来对目标做近似(refers to algorithms that rely on repeated random sampling to obtain numerical results)。相比其他统计学算法,蒙特卡洛的强大在于它的简单灵活已经容易实现(虽然不能得到真实值,但在样本基础足够大的时候可以无限逼近于真实值)。
简单的说,蒙特卡洛是尝试使用一些
例1: 通过均匀抽样计算 π \pi π值
蒙德卡洛是一种可以估算 π \pi π值的算法。这个例子就是假设我们有随机数生成器,那么我们能不能通过随机样本来估算 π \pi π呢?
- 假设我们在一个 x x x ~ U n i f o r m ( − 1 , 1 ) Uniform(-1,1) Uniform(−1,1), y y y ~ U n i f o r m ( − 1 , 1 ) Uniform(-1,1) Uniform(−1,1) 的平面内进行随机采样,那么这些点落在如上图中绿色圆内的概率是多大呢?我们可以计算出:
P (