R语言中的set.seed()函数

计算机并不能产生真正的随机数,若是你不设种子,计算机会用系统时钟来做为种子,若是你要模拟什么的话,每次的随机数都是不同的,这样就不方便你研究,若是你事先设置了种子,这样每次的随机数都是同样的,便于重现你的研究,也便于其余人检验你的分析结果。
http://bbs.pinggu.org/thread-336973-1-1.html
http://bbs.pinggu.org/thread-2121186-1-1.html
若是说函数中出现set.seed(3000),那就是说程序运行3000次,都是从同一个种子产生的随机数,仍是从不一样的种子产生的?
      另外,这个3000,指的是3000“个”随机数,仍是3000“批”(一批里面可能有若干个)随机数呢?
     若是我每循环一次,让set.seed(N)中的N增长一个常数,那会有什么做用?
et.seed(3000),不是运行3000次,而是把种子设置为3000。
计算机的程序,都是经过肯定的算法,根据肯定的输入,算出肯定的输出。想要获得真正的随机,须要经过外接物理随机数发生器,经过把随机的物理过程转变为随机值,才能实现。所以咱们日常使用的计算机的随机数,其实都只是经过算法模拟获得,也就是伪随机。通常采用的办法是线性同余(参见http://en.wikipedia.org/wiki/Linear_congruential_generator)。
X[n+1] = (a * X[n] + c) mod m
为简单起见,我取简单的参数(a = 1, c = 3, m = 5),获得一个简单的算式:
X[n+1] = (X[n] + 3) mod 5
这时,把X[0]视为种子,因而:
若种子为0,获得数列:0, 3, 1, 4, 2, 0, …
若种子为1,获得数列:1, 4, 2, 0, 3, 1, …
若种子为2,获得数列:2, 0, 3, 1, 4, 2, …
若种子为3,获得数列:3, 1, 4, 2, 0, 3, …
若种子为4,获得数列:4, 2, 0, 3, 1, 4, …
对于每一个种子,所获得的数列看起来都是随机的(每一个数值出现的频率都是相同的)。而一旦种子给定,每次调用随机数函数,函数都会根据上次获得的数列的某个值,计算出数列的下一个值并返回回来。而对于随机浮点数,通常是用随机产生的整数除以最大整数获得。
因此,随机数的种子通常只须要在调用随机函数以前设置一次,不建议设置屡次。
另外,我一直没有搞明白一件事:设置屡次种子,在算法上会不会对最终生成的随机数的分布形成影响?不知道有人了解么?
http://cos.name/cn/topic/15925
能够重复获得同一组伪随机数很重要。好比,你的程序有一个很隐蔽的错误,致使你用某些初始值会获得错误的结果,若是你没有设定种子,运行完程序一看结果错了,这时你确定想再用刚才的数据作一次debug,但永远不可能获得它了。再好比,写论文的时候,你的结果要给别人看,那么一个可重复使用的数据就很重要,你要让别人运行你的code也能获得你的结果就必需要设定种子,等等。
http://cos.name/cn/topic/106976html

相关文章
相关标签/搜索