【问题标题】:Caret cross validation插入符号交叉验证
【发布时间】:2016-12-07 16:46:47
【问题描述】:

我正在尝试了解 Caret 控件设置的工作原理。我正在通过插入符号控制功能使用交叉验证进行一些实验,例如

fitControl <- trainControl(## 10-fold CV
                           method = "repeatedcv",
                           number = 10,
                           ## repeated ten times
                           repeats = 10)

或

control <- rfeControl(functions=rfFuncs, method="repeatedcv", number=5, repeats = 5)

我的问题是,如果我在运行实验之前设置一些种子编号,即

set.seed(5432)
control <- trainControl(...)
results <- train(..., control)
...

是否保证每次运行实验时每个折叠都包含完全相同的样本?例如,假设我有 id = {1:100} 和插入符号 10 折交叉验证的样本,我的折叠是: fold1 = {1:10}, fold2 = {11:20}, ..., fold10 = {91:100}。我的问题是,如果我使用相同的种子号重新运行实验,我的折叠仍然与上一次运行完全相同?

我知道设置种子数有助于提高可重复性,但我只需要一个确认的答案,即这正是发生的情况。

非常感谢,

【问题讨论】:

    标签: r r-caret cross-validation


    【解决方案1】:

    有两种方法可以设置可重复性的种子。

    1. 在训练函数之前调用 set.seed。
    2. 在 trainControl(或 rfeControl)中设置种子

    有关选项 2 的更多信息,请查看帮助,以及 SO question

    更多详细信息,请访问caret website 的培训页面,关于再现性的注意事项

    部分

    【讨论】:

    • 我已经检查了您提到的文档,但没有明确说明采样折叠将完全相同。我尝试使用相同的种子号运行代码两次(使用您提到的两个选项进行了测试),经过检查,两次运行之间的 rowIndex 不同。
    • 如果您在运行train 之前将种子设置为相同的数字,您将获得相同的重采样。
    • @topepo 你是绝对正确的!我了解到的是,您需要每次实际运行 set.seed() 才能重新运行实验。我在代码的开头调用 set.seed 并且我认为它一直设置为这个数字,直到我改变它。那里完全错了。再次感谢窥视! :D
    猜你喜欢
    • 2015-04-02
    • 2023-04-04
    • 2018-10-22
    • 2015-11-11
    • 2015-09-17
    • 1970-01-01
    • 2015-04-06
    • 2013-12-26
    相关资源
    最近更新 更多