R語(yǔ)言中set.seed()括號(hào)里的數(shù)字到底是啥
主要作用:可重現(xiàn)一樣的結(jié)果
R語(yǔ)言中set.seed()作用是設(shè)定生成隨機(jī)數(shù)的種子,目的是為了讓結(jié)果具有重復(fù)性,重現(xiàn)結(jié)果。
不設(shè)定種子不行嗎?當(dāng)然可以,但是結(jié)果就不能復(fù)現(xiàn)。如:
x<-rnorm(3) #隨機(jī)生成3個(gè)隨機(jī)數(shù)
結(jié)果:1.4197419 -0.7460519 ?0.3603622
x<-rnorm(3) #再來(lái)一遍,生成的3個(gè)隨機(jī)數(shù)又不一樣了
結(jié)果:1.0796213 0.5598334 0.5344839
設(shè)定種子后,再試下:
set.seed(123)x<-rnorm(3) #隨機(jī)生成3個(gè)隨機(jī)數(shù)
結(jié)果:-0.5604756 -0.2301775 ?
1.5587083 x<-rnorm(3) #試圖復(fù)現(xiàn)上邊結(jié)果
結(jié)果:0.07050839 0.12928774 1.71506499
#哎呀,還是不一樣啊,哪里復(fù)現(xiàn)了?騙子!
#那是因?yàn)槟銢]有加上set.seed(123)!加上之后如下:
set.seed(123)x<-rnorm(3) #隨機(jī)生成3個(gè)隨機(jī)數(shù)
結(jié)果:-0.5604756 -0.2301775 ?1.5587083 #怎么樣,一樣了吧?別人想復(fù)現(xiàn)你的結(jié)果,必須要把種子seed和你設(shè)的一樣。
注:set.seed(1000),不是運(yùn)行1000次,而是把種子設(shè)置為1000。
那么問(wèn)題來(lái)了:設(shè)成100呢,1呢?有什么區(qū)別?(見下面的問(wèn)答部分)
這些數(shù)怎么產(chǎn)生的(產(chǎn)生原理)?
偽隨機(jī)產(chǎn)生的。計(jì)算機(jī)的程序,都是通過(guò)確定的算法,根據(jù)確定的輸入,算出確定的輸出。想要得到真正的隨機(jī),需要通過(guò)外接物理隨機(jī)數(shù)發(fā)生器,通過(guò)把隨機(jī)的物理過(guò)程轉(zhuǎn)變?yōu)殡S機(jī)值,才能實(shí)現(xiàn)。因此我們平常使用的計(jì)算機(jī)的隨機(jī)數(shù),其實(shí)都只是通過(guò)算法模擬得到,也就是偽隨機(jī)。一般采用的辦法是線性同余
(進(jìn)一步了解線性同余可參考下面的連接2,也可自行百度)。
問(wèn):set seed 后面跟的數(shù)字有什么用,比如 set seed 100 和 set seed 1000的區(qū)別是什么?
答:數(shù)字不同,產(chǎn)生的結(jié)果不同。只有數(shù)字相同,別人才能復(fù)制出來(lái)跟你一樣的結(jié)果。所以有些老師讓學(xué)生作業(yè)上用 set seed(學(xué)號(hào))來(lái)防止作弊。
問(wèn):set seed #為什么一般都很大呢?如果設(shè)為一位數(shù),會(huì)不會(huì)有問(wèn)題?如設(shè)為1。
答:Stata的說(shuō)明里說(shuō) “Without loss of pseudorandomness, the seed may be set to small numbers; e.g., set seed = 2.”,即可以設(shè)置很小,(不丟失偽隨機(jī)性的前提下)沒問(wèn)題的。
來(lái)源:set.seed()設(shè)置種子到底是啥作用? - 簡(jiǎn)書 (jianshu.com)