\displaystyle G(y) = P(Y \leq y) = P(X_1 \leq \phi^{-1}(y)) = F(\phi^{-1}(y))
再求导我们就能得到 Y 的概率密度函数:
\displaystyle g(y) = \frac{dG(y)}{dy} = f(\phi^{-1}(y))\frac{d}{dy}\phi^{-1}(y)
这样一来 , 我们就得到了对于一个随机变量进行一个映射 \phi(\cdot) 之后得到的随即变量的分布,那么,回到我们刚才的问题,我们想让这个结果分布就是我们所求的 , 然后再反推得 \phi(\cdot) 即可:
\displaystyle \frac{1}{9}y^2 = g(y) = f(\phi^{-1}(y))\frac{d}{dy}\phi^{-1}(y) = \frac{1}{3}\frac{d}{dy}\phi^{-1}(y)
经过简单的化简就可以得到 \phi^{-1}(y) = \frac{1}{9} y^3 ,亦即 \phi(x) = (9x)^{1/3}。也就是说,把得到的随机数 X_1 带入到到函数 \phi(\cdot) 中所得到的结果,就是符合我们预期要求的随机数啦python概率分布函数! :D 让我们来验证一下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#!/usr/bin/pythonimport numpy as np import matplotlib.pyplot as plotN = 10000 X0 = np.random.rand(N) X1 = 3*X0 Y = np.power(9*X1, 1.0/3)t = np.arange(0.0, 3.0, 0.01) y = t*t/9plot.plot(t, y, 'r-', linewidth=1) plot.hist(Y, bins=50, normed=1, facecolor='green', alpha=0.75)plot.show()
这就没错啦,目的达成啦!让我们来总结一下 。问题是这样的 , 我们有一个服从均匀分布的随机变量 X,它的概率密度函数为一个常数 f(x)=C , 如果是 [0,1] 上的分布,那么常数 C 就直接等于 1 了 。现在我们要得到一个随机变量 Y 使其概率密度函数为 g(y) ,做法就是构造出一个函数 \phi(\cdot) 满足(在这里加上了绝对值符号,这是因为 \phi(\cdot) 如果不是递增而是递减的话,推导的过程中有一处就需要反过来)
\displaystyle g(y) = f(\phi^{-1}(y))\left|\frac{d}{dy}\phi^{-1}(y)\right| = C\left|\frac{d}{dy}\phi^{-1}(y)\right|
反推过来就是,对目标 y 的概率密度函数求一个积分(其实就是得到它的概率分布函数 CDF , 如果一开始就拿到的是 CDF 当然更好),然后求其反函数就可以得到需要的变换 \phi(\cdot) 了 。实际上,这种方法有一个听起来稍微专业一点的名字:Inverse Transform Sampling Method。不过,虽然看起来很简单,但是实际操作起来却比较困难 , 因为对于许多函数来说,求逆是比较困难的,求积分就更困难了 , 如果写不出解析解,不得已只能用数 值方法来逼近的话,计算效率就很让人担心了 。可事实上也是如此 , 就连我们最常见的一维标准正态分布 , 也很难用这样的方法来抽样,因为它的概率密度函数
\displaystyle g(y) = \frac{1}{\sqrt{2\pi}}e^{-\frac{1}{2}y^2}
的不定积分没有一个解析形式 。这可真是一点也不好玩,费了这么大劲,结果好像什么都干不了 。看来这个看似简单的问题似乎还是比较复杂的 , 不过也不要灰心,至少对于高斯分布来说,我们还有一个叫做 Box Muller 的方法可以专门来做这个事情 。因为高斯分布比较奇怪,虽然一维的时候概率分布函数无法写出解析式 , 但是二维的情况却可以通过一些技巧得出一个解析式来 。
首先我们来考虑一个二维的且两个维度相互独立的高斯分布,它的概率密度函数为
\displaystyle f(x,y) = \frac{1}{\sqrt{2\pi}}e^{-\frac{x^2}{2}}\cdot\frac{1}{\sqrt{2\pi}}e^{-\frac{y^2}{2}} = \frac{1}{2\pi}e^{-\frac{x^2+y^2}{2}}
这个分布是关于原点对称的 , 如果考虑使用极坐标 (\theta,r) (其中 \theta\in[0,2\pi), r\in[0,\infty) )的话,我们有 x = r\cos\theta , y=r\sin\theta 这样的变换 。这样,概率密度函数是写成:
\displaystyle f(\theta,r) = \frac{1}{2\pi}e^{-\frac{r^2}{2}}
注意到在给定 r 的情况下其概率密度是不依赖于 \theta 的,也就是说对于 \theta 来说是一个均匀分布,这和我们所了解的标准正态分布也是符合的:在一个圆上的点的概率是相等的 。确定了 \theta 的分布,让我们再来看 r,用类似于前面的方法:
推荐阅读
- 如何浏览单个pdf,如何快速浏览多个pdf文件
- 区块链怎么报销发票,区块链发票能开专票吗
- 希腊即时战略游戏是什么,希腊即时战略游戏是什么游戏
- 怎么查mysql安装路径 怎么看mysql安装路径
- 小程序里文件怎么删,微信小程序里的文件
- 如何把pdf转成word,如何把pdf转成word文件
- 怎么用python2画爱心,用python画一个爱心
- vb.net网络监控 vbs监控进程的脚本
- redis主机内存需求的简单介绍