R中的随机数-Set.seed(N)

机器算法验证 r 随机生成
2022-02-13 14:20:31

我意识到set.seed()在 R 中用于伪随机数生成。我也意识到使用相同的数字,就像set.seed(123)确保您可以重现结果一样。

但我不明白的是价值观本身的含义。我正在玩几个功能,有些使用set.seed(1)or set.seed(300)or set.seed(12345)这个数字是什么意思(如果有的话)-我什么时候应该使用不同的数字。

例如,在我正在研究的一本书中——他们set.seed(12345)在为决策树创建训练集时使用。然后在另一章中,他们set.seed(300)用于创建随机森林。

只是不知道号码。

3个回答

您选择的种子数是生成随机数序列的起点,这就是为什么(假设您使用相同的伪随机数生成器)在给定相同种子数的情况下您将获得相同的结果。就您的第二个问题而言,Stata 中等效功能描述中的这个简短片段可能会有所帮助:

我们再怎么强调也不过分:不要过于频繁地播种。要了解为什么这是一个糟糕的主意,请考虑极限情况:设置种子,抽取一个伪随机数,重置种子,再次抽取,如此继续。您获得的伪随机数只不过是您通过数学函数运行的种子。除非您选择的种子随机通过,否则您获得的结果不会随机通过。如果你已经有了这样的数字,为什么还要费心使用伪随机数生成器呢?

http://www.stata.com/manuals13/rsetseed.pdf

简而言之,数字本身并没有任何意义!如果您正在查看其他人的代码(如您在上面给出的两个示例中),数字不会改变函数的功能;也没有特定功能的“好”数字。这完全取决于作者的选择。

此外,如果您只在代码中设置一次种子,那么您可以选择任何您喜欢的数字。唯一需要注意的是,如果您与任何其他也使用随机数的函数交互,那么最好选择一个非显而易见的种子(因此你们俩使用相同种子的可能性较小) )。

然而,正如 Corcovado 很好地指出的那样,对于某些应用程序,您需要非常小心地做出选择。如果从数学上讲,您需要许多伪随机生成的数字,那么您选择的数字就不可能有模式。

R 中的 set.seed() 函数采用(任意)整数参数。因此,我们可以采用任何参数,例如 1 或 123 或 300 或 12345 来获得可重现的随机数。

此外,在TeachingDemos 包中,char2seed 函数允许用户根据字符串设置种子。