线性同余法求随机数python实现_百面机器学习笔记 | 第八章:采样 | 02 均匀分布随机数...

3e3e0328cd94b52750d03591898b91e0.png

均匀分布是指整个样本空间中的每一个样本点对应的概率(密度)都是相等的。根据样本空间是否连续,又分为离散均匀分布和连续均匀分布。均匀分布可以算作是最简单的概率分布。从均匀分布中进行采样,即生成均匀分布随机数, 几乎是所有采样算法都需要用到的基本操作。然而,即使是如此简单的分布,其采样过程也并不是显然的,需要精心设计一定的策略。

如何编程实现均匀分布随机数生成器?

首先需要明确的是,计算机程序都是确定性的,因此并不能产生真正意义上 的完全均匀分布随机数,只能产生伪随机数(伪随机数是指这些数字虽然是通过 确定性的程序产生的,但是它们能通过近似的随机性测试)。另外,由于计算机的存储和计算单元只能处理离散状态值,因此也不能产生连续均匀分布随机数, 只能通过离散分布来逼近连续分布(用很大的离散空间来提供足够的精度)。

一般可采用线性同余法(Linear Congruential Generator)来生成离散均匀分布伪随机数,计算公式为:

613697ba8e6053299c2a6681c8d04a96.png

也就是根据当前生成的随机数

来进行适当变换,进而产生下一次的随机数
。 初始值
称为随机种子。上式得到的是区间[0,m−1]上的随机整数,如果想要 得到区间[0,1]上的连续均匀分布随机数,用
除以m即可。

可以看出,线性同余法得到的随机数并不是相互独立的(下一次的随机数根 据当前随机数来产生)。此外,根据线性同余法的计算公式,该算法最多只能产生m个不同的 随机数,实际上对于特定的种子,很多数无法取到,循环周期基本达不到m。如果 进行多次操作,得到的随机数序列会进入循环周期。因此,一个好的线性同余随 机数生成器,要让其循环周期尽可能接近m,这就需要精心选择合适的乘法因子a 和模数m(需要利用代数和群理论)。具体实现中有多种不同的版本,例如gcc中采用 的glibc版本:

174d58e92aeb2cb6ee58636bd1c5fb4a.png

但不管怎样,由计算机程序实现的随机数生成器产生的都是伪随机数,真正 的随机数只会存在于自然界的物理现象中,比如放射性物质的衰变,温度、气流 的随机扰动等。有一些网站可以提供基于大自然的随机现象的随机生成器,有兴 趣的读者可以尝试一下。下图是通过大气噪声来产生随机数,可以说是“货真价 实”的真随机数生成器了。

348d8e9a9f7d48a5a8cd4cb32322b180.png
闪电产生大气噪声

面试时,面试官还可能会针对线性同余法进行深入提问,比如,线性同余法 中的随机种子一般如何选定?如果需要产生高维样本或大量样本,线性同余法会 存在什么问题?如何证明上述线性同余发生器得到的序列可以近似为均匀分布 (伪随机数)?

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值