随机采样方法整理与讲解(MCMC、Gibbs Sampling等)
下面总结这么几点:
1、蒙特卡洛数值积分
2、均匀分布,Box-Muller 变换
3、Monte Carlo principle
4、接受-拒绝抽样(Acceptance-Rejection sampling)
5、重要性抽样(Importance sampling)
6、马尔科夫链,马尔科夫稳态
7、MCMC——Metropolis-Hasting算法
8、MCMC——Gibbs Sampling算法
1. MCMC概述
从名字我们可以看出,MCMC由两个MC组成,即蒙特卡罗方法(Monte Carlo Simulation,简称MC)和马尔科夫链(Markov Chain ,也简称MC)。要弄懂MCMC的原理我们首先得搞清楚蒙特卡罗方法和马尔科夫链的原理。
gibbs简析:
gibbs采样需要知道样本中一个属性在其它所有属性下的条件概率,然后利用这个条件概率来分布产生各个属性的样本值。
gibbs采样属于随机模拟抽样算法中的一种(一类近似求解的方法)。随机模拟的核心是对一个分布进行抽样,常用的抽样算法包括:
- 接受-拒绝抽样;
- 重要性抽样;
- MCMC(马尔科夫链蒙特卡洛方法)方法,它包括两个非常著名的采样算法(metropolis-hasting算法和它的特例Gibbs采样算法)(补充:MCMC方法最早由Metropolis(1954)给出,后来Metropolis的算法由Hastings改进,合称为M-H算法。M-H算法是MCMC的基础方法。由M-H算法演化出了许多新的抽样方法,包括目前在MCMC中最常用的Gibbs抽样也可以看做M-H算法的一个特例)。
2、蒙特卡洛数值积分
3、均匀分布,Box-Muller 变换
4、Monte Carlo principle
4.1. 随机投点法
4.2. 平均值法
import random
r = 1.0 # 圆半径,假设为1
n = 300000 # 总投点数
count = 0 # 落到圆内投点数
# 投点x,y的范围
x_min, x_max = -r, r
y_min, y_max = -r, r
for i in range(0, n):
# 在 [min, max] 范围内随机生成实数
x = random.uniform(x_min, x_max)
y = random.uniform(y_min, y_max)
# 落到圆内投点数+1
if x * x + y * y <= r:
count += 1
pi = (count / float(n)) * 4
print("pi is ", pi)
# pi is 3.142053333333333
import random
n = 300000 # 总投点数
count = 0 # 位于曲线之下的投点数
# 投点x,y的范围
x_min, x_max = 1.0, 2.0
y_min, y_max = 0.0, 8.0
for i in range(0, n):
# 在[min, max]范围内随机生成实数
x = random.uniform(x_min, x_max)
y = random.uniform(y_min,