概率密度采样2
来源:互联网 发布:电话网络销售工作内容 编辑:程序博客网 时间:2024/04/30 04:28
拒绝采样
前面提到通过函数转换的方法来对p(z)采样,然而问题是求不定积分和逆这两个过程对于大多数概率密度都是不可行的。因此必须要考虑其他的方法。
我们可以这样思考,对于p(z),如何取样呢?我们把p(z)画在二维平面上,往上均匀撒点,落在p(z)内对应的z就是样本点,否则就丢弃。这就是下面提出的拒绝采样的思路。
拒绝采样
由于直接撒点,必然会拒绝掉大部分随机点,这是非常低效的,因此我们希望用一个容易采样的分布p(y)去尽量逼近p(z),但保证要包含p(z)的所有样本。
(1)寻找一个简单的建议分布q(z),取样z~q(z),确定参数k,保证对于所有的z,有kq(z)>=p(z)
(2)对于每个z,取样u~U(0,kq(z))
(3)保留下所有u>p(z)的样本对(z,u),则对应的z就是p(z)的样本点
原理比较简单,即对kq(z)下区域均匀撒点,落在p(z)下就接受,落在灰色区域就拒绝。那么可接受样本概率的期望是1/k
NOTE:很多文献都会去掉p(x)的归一化因子变成
对于(u0,z0),落入p(z)下的概率为:p(z)/kAq(z)=
自适应拒绝采样
前面讨论的拒绝采样存在一个问题,就是怎么选择q(z)(称为envelope distribution),既要保证q(z)容易采样而且要足够逼近p(z)。很多情况下,这是非常困难的。
假设我们的p(z)是对数凹函数(这里采用国外定义凹凸性,即凹向原点为凹函数),那么先取一个grid points,然后以这些点(z,f(z))做切线,以这些切线作为lnq(z)来逼近ln(p(z))。这样q(z)就是一个分段指数分布的形式。
(1)取grid points,求出q(z),对于指数分布由上一节讲的函数转换就可以直接采样。
(2)按照拒绝采样的方法,对样本点z进行判断,如果接受考察下一个样本,如果拒绝,将拒绝的样本点加入 到gridpoints中,重复(1)
局限性
当然,这里自适应拒绝采样也是有局限的,首先要求梯度(切线);其次,要求原分布是对数凹的,一些解决的方法参见prml第531页。
而不管是那种方法,一个最大的问题是维度。对于一维二维问题,拒绝采样都可以很好的解决,但是对于高维度问题,该方法会使得采样变得非常低效。
简单起见,试想这样一个问题,我们希望对p=N(0,aI)采样,然后q=N(0,bI)是容易采样的。为了包容p,我们要使b>=a,因为如果b< a,那么无论k有多大,仅仅只能改变q的高度,而无法改变宽度,原来的q没法覆盖p,以后也不能。已经证明D维空间中k的最优值是
重要性采样
另外一种思路是这样的,由于采样的最终目的是为了计算期望,因此可不可以直接求期望而不用经过采样呢?我们知道期望计算为
(1)采样,
(2)均匀取点z,然后计算p(z),这样有
但是L会随着z的维度指数增长;不仅如此,对于高维空间,大概率密度会集中在小块空间上,因此均匀取值将十分低效,很多值都对E(f)没有贡献。我们要做的是选择那些p(z)很大而且p(z)f(z)也很大的那些点。
这里提供一种想法。用q(z)模拟p(z),希望对于p(z)f(z)大的地方q(z)也是比较大的,然后对q(z)进行采样,这些样本点对于p(z)f(z)来说大多是有意义的。这样有:
p/q就是对q模拟p的惩罚因子。
这个方法有两个重要问题,一是高维空间导致q(z)采样的样本可能只有少部分有意义;二是在p(z)f(z)大的地方q(z)没有采到样本。而且这种错误根本没法检测。
在prml书中提到一个例子,对有向图均匀采样->似然权重采样->自重要性采样,这些算法不是很懂,有待研究。
采样-重要性-重采样
这个过程感觉和重要性采样差不多,就是最后多了一步。
(1)z~q(z)
(2)按照重要性采样确定权重w,这也是一个概率分布
(3)对z~w进行重采样。
prml给出了证明,当L趋近无穷时,最后分布将和原分布一致。一般L有限,所以分布的接近程度还是取决于q和p的接近程度。
NOTE:
这些采样过程的一个重要应用是EM算法中e-step,当后验概率不可解析时,采样估计。
- 概率密度采样2
- 概率 & 采样
- 概率基础-概率密度函数
- 概率密度函数
- 概率密度估计简介
- Matlab--概率密度函数
- 概率密度分布
- 概率密度估计简介
- 02-概率密度
- 概率密度估计简介
- 概率密度函数估计
- 概率密度估计
- 概率密度函数 ××××× ××
- 什么是概率密度函数?
- 不等概率采样
- 二维概率密度求解边缘密度
- 概率密度函数与概率密度函数的估计
- 概率密度函数估计简介
- android 中本地java代码与html交互总结
- poj 1328 greedy
- mapwingis c++ mfc 改变光标状态达到放大缩小平移的效果
- 解决SwipeRefreshLayout左右滑动事件冲突的问题
- REHL5上安装salt-minion
- 概率密度采样2
- 巴什博弈
- foreach包并行计算
- 基本数据类型
- 工作日志5 软件项目管理计划
- jQuery操作DOM
- 无线鼠标,没电了的症状,迟钝不灵,指针忽然死掉
- ubuntu64位系统用32位的交叉工具链
- rsmgrsvc.exe 结束进程