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

  统计/机器学习 概率论 概率分布 Python    浏览次数: 2394
2

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

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


已经挂了,但求思路!

 

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



   3个回答 
6

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

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面经 问答 实战

KingBug   2017-12-18 16:18

3

让我来静静地装个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面经 问答 实战

Marvin_THU   2017-12-20 14:08

1

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


SofaSofa数据科学社区 DS面经 问答 实战

lucyhuo   2018-06-04 05:14



  相关主题

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

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

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

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

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

证明马尔可夫不等式   1回答

对于独立正态变量X, Y ~ N(0,1),X+Y和X-Y是否独立?   1回答

今天明天都下雨的概率   1回答

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

一个骰子平均扔多少回才能把六个数字都扔出来至少一次   2回答

扑克牌中的一个概率题   2回答

用一个骰子生成1到7的随机数?   4回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!