zoukankan      html  css  js  c++  java
  • 高斯分布的采样

    高斯分布的采样

    任意高斯分布都可以由正态分布通过拉伸和平移得到,所以这里只考虑标准正态分布

    逆变换法

    • 产生([0, 1])上的均匀分布随机数(mu)
    • (z = sqrt{2} erf^{-1}(2mu - 1)),则(z)服从标准正态分布。其中erf是高斯误差函数,它是标准正态分布的累积分布函数经过简单平移和拉升变换后的形式,定义如下

      [erf(x) = frac{2}{sqrt{pi}} int_0^x e^{-t^2}dt ]

    • erf的逆函数不好求解

    Box-Muller算法

    • 考虑两个独立的高斯分布的联合分布
    • 假设(x,y)是两个服从标准正态分布的独立随机变量
    • 具体采样过程如下:
      • 产生([0, 1])上的两个独立的均匀分布随机数(mu_1, mu_2)
      • (egin{cases} x = sqrt{-2ln(mu_1)}cos2pi mu_2 \ y = sqrt{-2ln(mu_1)}sin2pi mu_2 end{cases}),则(x,y)服从标准正态分布,并且是相互独立的
    • 需要计算三角函数,比较耗时
    • Marsaglia polar method
      • 在单位圆盘上产生均匀分布随机数对((x,y))
      • (s = x^2 + y^2),则(xsqrt{frac{-2ln s}{s}}), (ysqrt{frac{-2ln s}{s} })是两个服从标准正态分布的样本

    拒绝采样法

    • 选择指数分布作为参考分布,取(lambda = 1)的指数分布,其密度函数为(q(x)=e^{-x})
    • 对应的累积分布函数及其逆函数分别为

      [F(x) = 1 - e^{-x} ]

      [F^{-1}(mu) = -log (1-mu) ]

    • 利用逆变换法很容易得到指数分布的样本,再根据拒绝采样法决定是否接受该样本,接收概率为

      [A(x) = frac{p(x)}{Mcdot q(x)} ]

      其中(p(x)=frac{2}{sqrt{2pi}}e^{-frac{x^2}{2}} (x geq 0))是标准正态分布压缩到正半轴后的概率密度函数,常数因子(M)需要满足如下条件:

      [p(x) leq M cdot q(x) ]

    • 计算后得到接受概率

      [A(x) = e ^{-frac{(x-1)^2}{2}} ]

    • 具体采样过程如下:
      • 产生([0,1])上的均匀分布随机数(mu_0),计算(x = F^{-1}(mu_0))得到指数分布的样本(x)
      • 再产生([0,1])上的均匀分布随机数(mu_1),若(mu_1 < A(x)),则接受(x),否则重新采样
      • 再产生([0,1])上的均匀分布随机数(mu_2),若(mu_2 < 0.5),则将(x)转化为(-x),否则保持不变
    • Ziggurat算法:采用多个阶梯矩形来逼近目标分布,提高接受概率
  • 相关阅读:
    Ubuntu配置sublime text 3的c编译环境
    ORA-01078错误举例:SID的大写和小写错误
    linux下多进程的文件拷贝与进程相关的一些基础知识
    ASM(四) 利用Method 组件动态注入方法逻辑
    基于Redis的三种分布式爬虫策略
    Go语言并发编程总结
    POJ2406 Power Strings 【KMP】
    nyoj 会场安排问题
    Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.
    Java的String、StringBuffer和StringBuilder的区别
  • 原文地址:https://www.cnblogs.com/weilonghu/p/11922677.html
Copyright © 2011-2022 走看看