Numpy: 关于(numpy)随机种子的探讨
在本文中,我们将介绍Numpy库的随机数生成以及随机种子的重要性。随机数生成在很多应用场景中都是必不可少的,例如:模拟实验、概率推断、以及机器学习等。Numpy是Python中使用最广泛的数学库之一,它提供了一系列的随机数生成函数,例如 numpy.random.rand()
和 numpy.random.randn()
。这些函数一般都有一个 seed
参数来指定随机种子。那么,什么是随机种子,它的作用是什么?
阅读更多:Numpy 教程
随机种子是什么?
在计算机中,伪随机数是通过算法生成的,其实是一些随机性很弱的数值序列。生成的随机数也并非真正意义上的随机数,而是伪随机数。随机种子是一个用于初始化随机数生成器的值,也是一个能够使伪随机数表现得更像真随机数的关键值。
随机种子的作用是设置生成伪随机数的起点,从而控制或预测以后生成的随机数。同一颗带有相同的随机种子的棋子,在以后的操作中一定会得到相同的结果。如果不设置随机种子,那么每一次生成的随机数序列都是不一样的,这对于进行实验验证是很困难的。
举个例子,我们生成两个长度为3的随机数序列,其中一个带有随机种子,另一个没有设置随机种子。代码如下:
import numpy as np
# 设置随机种子
np.random.seed(42)
print(np.random.rand(3))
# 未设置随机种子
print(np.random.rand(3))
运行上述代码,输出结果:
[0.37454012 0.95071431 0.73199394]
[0.59865848 0.15601864 0.15599452]
我们可以观察到,两次运行 np.random.rand(3)
得到的结果是不同的。因为第二次 np.random.rand(3)
没有设置随机种子,算法每次都会生成一个不同的伪随机数序列,导致我们无法预测或控制生成的随机数。
随机种子的重要性
在机器学习模型中,采用伪随机数生成器生成随机数是非常频繁的操作。例如,在模型训练中,每一次迭代训练时,需要随机打乱训练数据集,随机初始化模型的参数。此时,如果没有设置随机种子,在模型测试或部署时将无法复现相同的结果,这样就会影响模型的可靠性与稳定性。
另外,采用伪随机数的实验也需要注意随机种子的设置。例如,在比较两个模型(或算法)的性能时,往往需要对实验进行多次运行以便得出更加准确的结论。但是,无论在多次运行实验之前打乱数据、初始化模型参数这些操作中,都应该使用相同的随机种子进行每一次实验。
怎样设置随机种子?
设置随机种子很简单,只需要在使用Numpy库中的随机数生成函数时,将随机种子设置为一个固定值即可。例如:
np.random.seed(42)
或者
np.random.seed(2021)
两种方式都可以设置随机种子,但是需要注意:种子值的选取应该尽量来源于“真随机数”而非“伪随机数”,这样生成的随机数序列才更加接近真实随机数的分布。
怎样确定随机种子的值?
关于如何确定随机种子的值,一种方法是利用时间戳,将当前时间转化为一个整数后作为随机种子的值。另一个方法是直接设置一个常数作为随机种子的值。有人可能会想:直接将随机种子设置为一个大整数,应该就足够好了吧?
然而,这种做法可能反而会对生成的随机数产生负面影响。一些坏的种子值可以导致随机序列变得相当特殊,比如缺乏某些数量或分布的数值,或者出现了一些不遵循统计规律的模式。简单说,这种情况会对最终执行结果的准确性产生不良影响。因此,建议使用比较特殊的值进行设置,例如一些质数等。
怎样使用随机种子?
关于如何使用随机种子,我们需要先明确一个事实:利用随机数生成器生成的“随机数”是伪随机数(由算法生成),因此,如果我们使用相同的随机种子启动生成器,我们可以得到相同的“随机数”。例如:
# 数据
x = np.random.rand(3, 2)
# 设置随机种子
np.random.seed(42)
# 生成3个随机索引(0-2)
ind = np.random.randint(0, 3, 3)
# 使用索引取数
print(x[ind, :])
# 再次进行同样的操作
np.random.seed(42)
ind2 = np.random.randint(0, 3, 3)
print(x[ind2,:])
输出结果:
[[0.37454012 0.95071431]
[0.73199394 0.59865848]
[0.73199394 0.59865848]]
[[0.37454012 0.95071431]
[0.73199394 0.59865848]
[0.73199394 0.59865848]]
可以看到,在第一次和第二次操作中我们使用了相同的随机种子,因此我们得到了相同的索引序列,所选出的数据组也是相同的。
总结
在本文中,我们介绍了Numpy库中随机数生成以及随机种子的概念与重要性,并探讨了如何设置和使用随机种子。使用随机种子可以使得伪随机数更接近于真实的随机数,从而增强了实验的可重复性和可比性。在机器学习等应用场景中,随机种子的设置也非常重要,它可以增强模型的可靠性与稳定性,确保我们可以复现相同的结果。最后,我们建议在选择种子值的时候,要尽可可能地使用比较特殊的值,例如一些质数等。