最近在学马尔科夫链蒙特卡洛抽样,其中涉及到接受-拒绝抽样。在阅读了:
https://www.cnblogs.com/pinard/p/6625739.html
文章后有了一定的了解,在此写下自己的感想加深理解。
为什么要采用ARS抽样?
因为在研究过程中变量x的分布不一定满足(a,b)的均匀分布
图1中x的分布是均匀分布,图2的x分布是不均匀分布。
那么问题来了,当遇到采样点的x分布不是均匀分布我们该怎样采样?
我们可以采用数学上逼近的思想:我用一个已知的并且正常的关于x的概率密度函数q(X)包裹我需要采样的这个概率密度函数p(X)。
所以使用ARS进行抽样需要哪些大前提:
1:需要已知进行采样的概率密度函数p(X)
2:包裹这个极不规则的p(X)的q(X) %%因为p(X)在区间(a,b)的积分为1,并且q(X)在区间(a,b)的积分也为1,所以想要q(X)完全包裹p(X)就必须乘一个大于1的系数:M。并且这个M尽量接近于1。这样在采样过程中拒绝的样本点才会少,才能提高效率。
3:一个(0,1)的均匀分布。步骤2是为了采集样本点x,和为步骤3做准备,感觉步骤二有点像建模。步骤三是为了接受和拒绝这个样本点,像是求解。按我的理解步骤3是ARS采样方法的核心。我在采集到x后,比如x0,那我就就有了对应的f(x0),那么我到底接不接受这个(x0,f(x0))样本呢?那就需要比较Mq(x0)和f(x0),如果f(x0)≤Mq(x0),那就是在我的抽样区间内,我就要他,否则直接拒绝,不合适。
怎么理解u≤f(x0)/(Mq(x0))?这步令我最头疼。
我们现在确定了f(x0)和Mq(x0),那么我们现在最关心的是如何产生(0,f(x0))的样本点?
解决这样的办法就是在满足(0,Mq(x0))的采样空间满足概率密度函数为1/(Mq(x0))进行采样。
经过采样得到了一系列的点:s1 s2 s3 ......sn
那我该怎样选择这些点呢?
只要sn≤f(x0)那我就接受他,否则pass掉,直接next。
那么p(sn≤f(x0))=f(x0)/(Mq(x0))
所以只有p(sn)≤f(x0)/(Mq(x0))时,才会接受sn。
这下理解了。
ok,那我现在就完成在x0dian处的采样了。接下来就是在x1处重复上述步骤。
感悟:
ARS采样就是对均匀分布采样的活学活用,再一次证明了随机采样的厉害
但局限性也很强:在一维分布中可以很好的使用,二维以上就很难使用,一般我们很难知道二维的边缘概率密度函数,只能知道条件概率密度函数,使用困难。
这时候又想学习马尔科夫链蒙特卡洛抽样。
学习永无止境,哭了。