簡體   English   中英

如何修復 R 中樣本 function 的隨機種子

[英]How to fix the random seed of sample function in R

我想知道如何在 R 中修復樣本 function 的隨機種子。

一個簡單的例子在這里:

set.seed(1)
tmp <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
sample(tmp, size = 3)       # (*)
#[1] 9 4 7
sample(tmp, size = 3)       # (**)
#[1] 1 2 5
sample(tmp, size = 3)       # (***)
#[1] 7 2 3
sample(tmp, size = 3)       # (****)
#[1] 3 1 5

# retry set the random seed
set.seed(1)
sample(tmp, size = 3)       # (*)
#[1] 9 4 7
sample(tmp, size = 3)       # (**)
#[1] 1 2 5
sample(tmp, size = 3)       # (***)
#[1] 7 2 3
sample(tmp, size = 3)       # (****)
#[1] 3 1 5

然后,當我重復示例 function 時,返回值會發生變化,盡管變化的模式是一致的。

我不明白為什么樣本 function 與 set.seed 的影響不同。 如何修復樣品 function 的退貨?

感謝您花時間閱讀這個問題。

像這樣的東西可能是

{set.seed(1); sample( tmp, 3 )}

[1] 9 4 7

這將在調用時返回相同的結果

我認為你的帖子有點回答了這個問題。 如果您注意到設置種子后的第一個樣本是相同的,這就是預期的結果:

set.seed(1)
tmp <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
sample(tmp, size = 3)
[1] 9 4 7
sample(tmp, size = 3)
[1] 1 2 5

set.seed(1)
tmp <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
sample(tmp, size = 3)
[1] 9 4 7
sample(tmp, size = 3)
[1] 1 2 5

設置種子后的第一盤三局相同。 第三次抽簽也是一樣。

通過查看 6 個隨機選擇值的第一次抽簽,也許更容易了解set.seed的工作原理:

set.seed(1)
tmp <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
sample(tmp, size = 6)
[1] 9 4 7 1 2 5

您的問題似乎反映了對偽隨機數生成器 (PRNG) 和種子的基本誤解。 PRNGs maintain an internal state containing a fixed number of bits, and advance from the current state to the next state by applying a deterministic function. function 決定了基於狀態的輸出序列看起來有多“隨機”,即使它實際上不是隨機的(因此是偽前綴)。 給定固定數量的位,算法最終將重復其內部 state,此時整個序列重復,因為它是確定性的。 這樣做需要多長時間稱為 PRNG 的周期長度。

一旦你意識到所有 PRNG 最終都會重復它們的序列,很容易看出種子所做的只是提供了一個進入該循環的入口點。 很多人錯誤地認為種子會影響 PRNG 的質量,但這是不正確的。 質量基於確定性轉換 function,而不是種子。

那么為什么 PRNG 允許你指定種子呢? 基本上是為了重現性。 首先,如果您無法重現暴露錯誤的數據,那么調試程序真的很困難。 使用相同的種子重新運行將允許您追蹤導致問題的任何原因。 其次,這允許對替代系統進行更公平的比較。 假設您想比較雜貨店或銀行在添加額外的店員或出納員時的運作方式。 如果您通過控制播種對同一組客戶和客戶事務運行兩種配置,那么您看到的這些配置之間的差異直接歸因於系統配置的更改。 在不控制播種的情況下,序列的隨機性可能會抑制或放大差異。 是的,從長遠來看,這會通過采集更大的樣本來得出,但關鍵是你可以通過巧妙地使用種子而不是增加樣本量來減少答案的方差。

底線 - 您的示例完全按預期工作。 當以相同方式采樣時,重置種子會產生相同的隨機序列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM