R中的随机数-Set.seed(N)[重复]


37

这个问题已经在这里有了答案:

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

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

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

只是不知道电话号码。


6
这有帮助吗? stackoverflow.com/questions/14684437/…R中的 ?set.seed()也提供了很好的信息。
doug.numbers 2014年

6
使用种子的主要目的是能够复制“随机”数字的特定序列。一般来说,如果您不需要这样做,就不会设置种子。种子本身没有任何内在含义,只是它是一种告诉随机数生成器“从哪里开始”的方式。您可能会认为它有点像PIN码和您的银行帐户之间的关系。PIN码与数字的长字符串(您的账号)有关,但它不是天生可解释的数量(有一个解释,但在设置它,你忽略)。
Glen_b 2014年

4
根据记录,42永远是正确的种子
Repmat

只是一句话:我建议仅将随机数生成器设置为(i)调试脚本,查找某些特定错误等,或(ii)发送/发布结果以便可以对其进行检查。
AADF

Answers:


38

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

我们不能足够强调这一点:不要太频繁地设置种子。要了解为什么这是一个坏主意,请考虑限制情况:设置种子,绘制一个伪随机数,重置种子,再次绘制,然后继续。您获得的伪随机数仅是您通过数学函数运行的种子。除非您选择的种子随机通过,否则您获得的结果将不会随机通过。如果您已经有这样的数字,为什么还要打扰使用伪随机数生成器呢?

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


15
谁知道Stata有这么有趣的文档:“其他人试图组成一个随机数,弄清楚它们是否包含足够的数字,结果必须是随机的。这是丢弃食物的5秒规则的一种变化,我们承认使用这两个规则”
简朴的粗麻布效果

4

简而言之,数字本身并没有任何意义!如果您正在查看其他人的代码(例如上面提供的两个示例),则数字不会更改该功能。两种功能都没有“好”号。这取决于作者的选择。

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

但是,正如Corcovado很好地指出的那样,对于某些应用程序,您在选择时需要特别小心。如果在数学上您需要多个伪随机生成的数字,那么您选择的数字就不会有任何规律。


1

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

同样,在TeachingDemos包中,char2seed函数允许用户基于字符串设置种子。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.