【问题标题】:R: set.seed() results don't match if caret package loadedR:如果加载了插入符号包,set.seed() 结果不匹配
【发布时间】:2016-11-22 18:10:54
【问题描述】:

我在 R(版本:3.3.0)中使用createFolds() 来创建训练/测试分区。为了使结果可重现,我使用 set.seed() 的种子值为 10。正如预期的那样,结果(生成的折叠)是可重现的。

但是一旦我在设置种子后加载了插入符包。然后使用createFolds函数,发现创建的折叠不一样(虽然还是可以重现的)。

具体来说,创建的折叠在以下两种情况下有所不同:

案例一:

library(caret)
set.seed(10)
folds=createFolds(y,k=5,returnTrain=TRUE)

案例 2:

set.seed(10)
library(caret)
folds=createFolds(y,k=5,returnTrain=TRUE)

y 是一个向量。

为什么会发生这种情况?

【问题讨论】:

    标签: r r-caret random-seed


    【解决方案1】:

    罪魁祸首是ggplot2,它是在您加载插入符号时附加的。它定义了一个.onAttach 函数:https://github.com/hadley/ggplot2/blob/master/R/zzz.r

    这个函数在打包时调用,见help("ns-hooks")。并在其中调用runif,从而推进RNG的状态。

    【讨论】:

    • 前几天出现了一个similar question;一些包在启动时使用随机数
    • @topepo 有没有办法解决这个问题?我有同样的问题,但即使我在加载插入符号包后设置种子。这是预期的吗?我希望将插入符号用于 createFolds,但我需要一种使其可重现的方法。编辑:我刚刚意识到我没有在createFolds() 的不同调用之间设置种子,这就是问题所在。
    猜你喜欢
    • 2017-12-26
    • 2018-02-22
    • 2016-01-30
    • 2017-08-18
    • 1970-01-01
    • 2020-08-17
    • 2017-07-22
    • 2022-12-19
    • 2020-12-19
    相关资源
    最近更新 更多