由均匀分布生成标准正态分布

  统计/机器学习 概率论 概率分布 Python    浏览次数:10749        分享
3

上周一道面试题,给你一个0到1的均匀分布,如何近似地生成一个均值为0,标准差为1的标准正态分布。并且用python实现。

也就是说你只能用numpy.random.uniform()这个函数,然后通过自己的一些算法,得到numpy.random.normal()。


已经挂了,但求思路!

 

有故事的董同学   2017-11-14 23:10



   3个回答 
7

这个面试的考点就是中心极限定理和均匀分布吧。一组随机变量的均值符合正态分布。

np.random.uniform()生成的是(0, 1)之间均匀分布的随机数, 2 * np.random.uniform() - 1生成的是(-1, 1)之间均匀分布的随机数。

一个常识是(a, b)的随机均匀分布变量的方差是(a - b)^2 / 12。含有n个样本的样本均值的方差是(a - b)^2 / 12 / n。

import numpy as np
normal_rv = 30 * np.mean(2 * np.random.uniform(size=300) - 1)

上面得到的normal_rv就是一个标准正态分布随机变量。

具体步骤是先产生300个(-1, 1)随机变量,它们的均值的标准差是1 / 30,要得到标准正态分布,所以最前面要乘以30.


SofaSofa数据科学社区DS面试题库 DS面经

KingBug   2017-12-18 16:18

5

让我来静静地装个X,题目要求是近似的正态,其实完全可以精确的正态。Box–Muller变换就能做到这一点。

假设$i.i.d.~X_1, X_2\sim U(0,1)$,也就是服从(0, 1)均匀分布,那么

$$Z=\sqrt{-2\text{ln}(X_1)}\cos(2\pi X_2)$$

就是服从$N(0,1)$标准正态分布的随机变量。上面那个式子就是Box-Muller变换。


SofaSofa数据科学社区DS面试题库 DS面经

Marvin_THU   2017-12-20 14:08

2

iid = (np.mean(np.random.uniform(0,1,n))-0.5)*np.sqrt(12*n)


SofaSofa数据科学社区DS面试题库 DS面经

lucyhuo   2018-06-04 05:14



  相关讨论

指数家族有哪些常见的概率分布?

指数分布、几何分布、泊松分的联系是什么?

多个独立同分布的均匀随机变量的最小值的期望是多少?

概率中pdf和pmf的区别是什么?

怎么从矩母函数(mgf)推导得到概率密度函数(pdf)?

为什么p value是服从[0, 1]均匀分布的?

柯西分布没有数学期望

证明马尔可夫不等式

超几何概率问题

什么是Jensen不等式?有什么直观的解释?

  随便看看

dropout rate一般设置多大?

python pandas里有没有类似R的summary的函数?

模型调参时常用到的Grid Search是什么意思?

怎么对pandas dataframe做转置?

在jupyter后台进程没有shutdown的notebook一直会占用内存吗?