得到的概率值_概率图(4):采样方法之MCMC

采样方法指的是给定一个特定的概率分布的表达式

,得到一批符合这个概率分布的样本点。

采样的方法有很多,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))

再举个定积分计算的例子:假设现在想计算积分

,直接计算结果为2.67。首先,还是要选定区域。作为一个递增函数,直接看
的值,确定横轴范围为0-2,纵轴范围为0-4,所以在这个范围内抽样。函数下方的点数量c代表求的积分面积,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,那么下一年的人口分布是怎么样的?我们可以用如下的矩阵计算表示:

而作为一个个体,其实是在不同的状态(农村或城市)之间跳转,比如

时,是农村人,
时,是城市人。马尔可夫链就是生成这样一段状态序列的随机过程,其中城市和农村互相流动的矩阵,叫做迁移矩阵。马尔可夫链的这个随机过程满足马尔科夫性质,也就是某一个状态的值,只跟前一个状态相关。用公式表示就是:

而迁移矩阵的每一个元素其实就对应着一个条件概率值。所以后面会同时用

这两种写法来代表迁移矩阵的某一项。

现在回头来看刚才那个例子。当状态迭代到一定程度之后,会发现,城市和农村的人数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值