Numpy: 关于(numpy)随机种子的探讨

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库中随机数生成以及随机种子的概念与重要性,并探讨了如何设置和使用随机种子。使用随机种子可以使得伪随机数更接近于真实的随机数,从而增强了实验的可重复性和可比性。在机器学习等应用场景中,随机种子的设置也非常重要,它可以增强模型的可靠性与稳定性,确保我们可以复现相同的结果。最后,我们建议在选择种子值的时候,要尽可可能地使用比较特殊的值,例如一些质数等。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程