繁体   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