Random seed(随机种子)

在机器学习领域中,有很多的操作和算法带有一定的随机性,因此在复现时,如果涉及到这些操作或算法,结果就可能产生差异,以下是常见的带有随机性的一些操作和算法:

  1. 神经网络中的权重初始化。
  2. 聚类算法,例如:K-means算法的初始聚类中心。
  3. 随机森林算法中涉及到的数据或特征抽样。
  4. 在整体数据集中,随机抽取样本组成的训练集和测试集。

当需要复现带有一定随机性的一些操作和算法时,就需要用到随机种子来固定随机的结果。

随机数:就是指专门针对的随机试验的结果。

如果想要获得真正的随机数,就需要针对随机数的定义,通过外置的观测设备,观测记录某个真正的随机试验的结果,例如:抛硬币、抛骰子。但是以上操作非常的不方便,所以为了解决这个问题,在计算机内部通常使用伪随机数方法。计算机程序中有很多种生成伪随机数的方法,其中一种常用的方法是利用伪随机数生成器(PRNG)。

以下是一种简单的PRNG方法:

将伪随机数生成器看作是一个转换函数f(x),在生成的起始向伪随机数生成器输入x1,当输入x1后通过转换函数f(x)得到第一个随机数y1。接下来再把y1输入到转换函数f(x)中,就可以得到第二个随机数y2。如此一直重复下去,就可以得到一个伪随机数序列。

当然,以上的算法仅仅是一个简单的参考示例,实际中的随机数生成程序要复杂的多。

对于这个伪随机数生成程序,可以发现如果初始输入的x1是相同的,那么得到的随机序列就是相同的,因此我们将这个初始的x1称作随机种子。

所以在计算机中使用的诸如PRNG等伪随机数生成器生成的序列并不是真随机序列,它完全由输入的初始值决定,这个初始值被称为随机种子(random seed)。因此,面对一个随机操作,只要运行环境一致并保证伪随机数生成程序相同,此时设定随机种子一致就可以复现结果。

From:https://www.zhihu.com/question/413925742/answer/1821110273

在Python中,使用random.seed()来设置随机种子。

random.seed() : 会改变随机生成器的种子,传入的数值用于指定随机数生成时所用算法开始时所选定的整数值。如果使用相同的seed值,则每次生成的随机数都相同。如果不设置这个值,则系统会根据当前系统时间来自己选择这个值,此时每次生成的随机数会因为时间的差异而有所不同。

例如:

1.当不使用random.seed()时,每次生成的随机数不同。

2.当使用random.seed()时,每次生成的随机数相同。

3.通过这段程序可以发现,使用random.seed()设定的随机种子仅有一次有效。

 

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐