采样方法指的是给定一个特定的概率分布的表达式
采样的方法有很多,MCMC是其中的一类方法,意思是利用Mento Carlo和Markov Chain完成采样。
当然,要完成对各种分布的采样,有一个默认的假设,就是我们已经知道对特定的简单分布如何采样。比如对均匀分布进行采样(后面就专指范围为0-1的均匀分布),也就是编程中通常会用到的伪随机数发生器,在各大编程语言中通常以random命名的模块/方法出现。
关于采样方法在概率图参数估计中的具体应用案例,打算在后面的文章进行补充。这里先给一个抽象的场景:
假设
那么如果我们能根据
Mento Carlo
蒙特卡罗方法是一种通过在一定范围内均匀随机抽样来得到某个结果的计算方法。方法的大致思路框架是:
1 针对计算问题选定抽样范围
2 在范围内进行随机抽样
3 根据问题定义,计算一些必要的样本统计值(或者说是对样本进行归类)
4 整合这些统计值,得到最终结果
举一个计算圆周率的例子:在正方形中作一个内切圆,随机抽样一些点,记在内切圆中的点的数量为c,所有点的数量为n。那么c和n的比例就是内切圆和正方形的比例,即:
python代码示例:
import random
n = 100000
c = 0.0
for _ in range(1,n):
x = random.uniform(-1,1)
y = random.uniform(-1,1)
if x * x + y * y < 1: # x和y在横竖坐标轴均为[-1,1]的方形范围内取点,在圆内的点到圆心的距离应该小于1
c += 1
print(4 * c / float(n))
再举个定积分计算的例子:假设现在想计算积分
python代码示例:
import random
n = 100000
c = 0.0
for _ in range(1,n):
x = random.uniform(0,2)
y = random.uniform(0,4)
if x * x > y: # 取函数下方的点,所以y的值应该小于x对应的函数值
c += 1
print 8 * c / float(n)
Markov Chain
想象一个国家,其城市人口和农村人口会每年发生一次迁移,并且迁移概率是固定的。假设每年城市迁农村的概率是3%,农村迁城市的概率是5%。如果某一年,城市和农村的人口分别是2000和14000,那么下一年的人口分布是怎么样的?我们可以用如下的矩阵计算表示:
而作为一个个体,其实是在不同的状态(农村或城市)之间跳转,比如
而迁移矩阵的每一个元素其实就对应着一个条件概率值。所以后面会同时用
现在回头来看刚才那个例子。当状态迭代到一定程度之后,会发现,城市和农村的人数