机器学习:软件工程方法与实现
上QQ阅读APP看书,第一时间看更新

3.4.1 随机数生成的原理和概念

本节案例代码里的随机数是由计算机的随机数生成器生成的。为了更好地理解随机数,我们首先从随机数的概念开始介绍。随机数是随机试验的结果。在统计学的很多技术中需要使用随机数,比如在从统计总体中抽取具有代表性样本的时候,在将实验动物分配到不同的试验组的过程中,在进行蒙特卡罗模拟法计算的时候等。

1.随机数的生成

常用编程语言一般会提供随机数函数,在Python数据分析中常用Numpy提供了random函数,它是伪随机数。利用数学算法产生的随机数属于伪随机数,当随机种子相同时,对于同一个随机函数,得出的随机数列是固定不变的。与之对应的是真随机数,真随机数是无法预测且无周期性。根据生成随机数的方法可以分为:真随机数发生器和伪随机数发生器。

·真随机数发生器:像无法实现永动机一样,靠程序是永远无法实现真随机数的,很多情况下只能听天由命。真正的随机数是使用物理现象产生的:比如掷骰子、使用电子元件的噪声、核裂变等,这样的随机数发生器叫作真随机数发生器,也称物理性随机数发生器,它们的缺点是技术要求比较高。

·伪随机数发生器:程序得到的随机数是通过一个固定的、可以重复的计算方法生成的,这本身就违反了随机的定义,但是它们具有类似于随机数的统计特征,这样的随机数发生器叫作伪随机数发生器。在实际应用中往往使用伪随机数就足够了。伪随机数中一个很重要的概念就是种子,种子决定了随机数的固定序列,种子固定了,得到的序列就是相同的。

2.计算机如何生成伪随机数

随机种子是用来产生随机数的一个数,在计算机中,它是一个无符号整形数。那么随机种子是从哪里获得的呢?随机种子一般取自系统时钟,确切地说,是来自计算机主板上的定时器在内存中的记数值(注:计算机的主机板上都会有这样一个定时器用来计算当前系统时间,每过一个时钟信号周期计数器都会加1)。

如果没有设置随机数种子,那么将默认采用当前时钟作为随机数种子,代入生成函数中生成随机数。伪随机数生成函数虽然只是几个简单的函数,但却是科学家多年的研究成果。总之:

1)伪随机数并不是假随机数,这里的“伪”是有规律的意思,即计算机产生的伪随机数既是随机的又是有规律的。

2)随机种子一般使用自系统时钟。

3)随机数是由随机种子根据一定的计算方法计算出来的数值,所以只要计算方法和随机种子固定,那么产生的随机数就不会变。