【问题标题】:Creating Custom Folds For Caret CV为 Caret CV 创建自定义折叠
【发布时间】:2016-11-08 20:48:29
【问题描述】:

我正在使用 caret 包进行建模和交叉验证

model <- caret::train(mpg  ~ wt
                           + drat
                           + disp
                           + qsec
                           + as.factor(am),
                  data = mtcars,
                  method = "lm",
                  trControl = caret::trainControl(method = "cv",
                                                repeats=5,
                                                returnData =FALSE))

但是,我想向 trainControl 传递一组与我的折叠相关的自定义索引。这可以通过 IndexOut 完成。

model <- caret::train(wt ~  + disp + drat,
                  data = mtcars,     
                  method = "lm",
                   trControl = caret::trainControl(method = "cv",
                                      returnData =FALSE,
                                      index = indicies$train,
                                      indexOut = indicies$test))

我正在苦苦挣扎的是,我只想测试 mtcars 中 mtcars.am==0.因此,createFolds 的使用将不起作用,因为您无法添加标准。有谁知道允许将行索引到 K 折叠中的任何其他函数,其中可以在创建 indicies$test 时添加 mtcars.am==0 的标准?

【问题讨论】:

    标签: r r-caret cross-validation


    【解决方案1】:

    我认为这应该可行。只需将所需的行索引提供给索引即可。

    index = list(which(mtcars$am == 0))
    
    model <- caret::train(
        wt ~  +disp + drat,
        data = mtcars,
        method = "lm",
        trControl = caret::trainControl(
            method = "cv",
            returnData = FALSE,
            index = index
        )
    )
    

    index 参数是一个列表,因此您可以通过在索引中创建多个嵌套列表来为该列表提供任意数量的迭代。

    【讨论】:

    • 是的,这只是其中的一部分,但只提供了 1 折验证,我追求的是您仍然可以创建多个折痕的东西。老实说,我现在自己也差不多了。
    【解决方案2】:

    感谢您的帮助。我最终通过修改来自createFolds 的输出而不是最好的示例 mtcars 到达那里,因为它是一个如此小的数据集,但你明白了:

    folds<-caret::createFolds(mtcars,k=2)
    
    indicies<-list()
    
    #Create training folds
    indicies$train<-lapply(folds,function(x) which(!1:nrow(mtcars) %in% x))
    
    #Create test folds based output "folds" and with criterion added
    indicies$test<-lapply(folds,function(x) which(1:nrow(mtcars) %in% x & mtcars[,"am"]==1))
    

    【讨论】:

      猜你喜欢
      • 2014-05-19
      • 2017-08-17
      • 1970-01-01
      • 1970-01-01
      • 2020-09-07
      • 1970-01-01
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多