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

相關文章
相關標籤/搜索