在插入符号包中,有没有办法在trainControl的交叉验证方案的折叠中使用递归特征消除函数,该函数传递给使用调整网格的列车函数?

我喜欢递归特征消除功能,但它确实应该应用于交叉验证中的训练折叠,然后在保持折叠上进行测试 .

我已经玩了很多不同的方法来做到这一点,但没有一个是完美的 . 例如,我可以进行自己的交叉验证折叠并使用method ='none'运行trainControl,但不会在列车中使用训练网格(需要评估组) . 我也可以在trainControl中创建我自己的cv折叠,并且有method ='cv'(我可以在这里使用调整网格),但是最好的调整是在trainControl保持生成的保持样本上选择的,不是我的坚持

有没有办法告诉插入符号在预先指定的保持折叠(在消除特征之前采取的那个)上使用调整网格评估模型?

在我的工作流程中,我正在使用自己的调整网格测试几种不同的模型类型 . 我非常喜欢有部分插入符号,我花了很多时间在这上面,所以我想使用它,但如果我不能让它工作,这是一个交易破坏者 . 我愿意接受任何建议!

提前致谢-

解决方案:我的解决方案可能不是最有效的,但似乎有效 . 我使用以下信息进行了交叉验证折叠:https://stats.stackexchange.com/questions/61090/how-to-split-a-data-set-to-do-10-fold-cross-validation . 使用createFolds(插入符函数)不会创建相等的折叠,所以我选择了第二个解决方案 . 看起来你可能会用插入的方式来做这件事's stratified sampling, but I haven' t .

此代码在每个cv折叠中使用自举方法,并预测每次迭代的保持折叠中的所有观察 .

## Make the folds for the cross validation
  folds <- cut(seq(1,nrow(data)), breaks=10, labels=FALSE) %>%
    sample(., length(.), replace= F)

  for(f in 1:10) { 

    testIndexes <- which(folds == f,arr.ind=TRUE)
    trainIndexes <- which(folds != f, arr.ind= T)

    trainIndexList <- replicate(500, sample(trainIndexes, length(trainIndexes), replace = T), simplify = F)
    testIndexList <- replicate(500, testIndexes, simplify = F)

    testData <- data[testIndexes, ]
    trainData <- data[-testIndexes, ]

    ## Make the train control object
    train_control <- trainControl(method = 'boot', 
                                  numbe r= 1,
                                  summaryFunction = modfun,
                                  preProcOptions = c('center', 'scale', newdata= testData),
                                  index = trainIndexList,
                                  indexOut = testIndexList,
                                  classProbs = T,
                                  savePredictions = T)

  ## Feature Selection
    ## Make the control for the recursive feature elimination
  rfe_control <- rfeControl(functions = rfFuncs, method = 'cv', number= 10)

    ## Generate the data frame based on feature selection
  fs_results <- rfe(trainData[,2:ncol(trainData)],
                    trainData[,'target'],
                    sizes=c(2:ncol(trainData)),
                    rfeControl= rfe_control)

  use_features <- c('target', predictors(fs_results))

  features <- predictors(fs_results) %>% data.frame(features= .) %>% mutate(fold= f) %>%
    rbind(features, .) ## Specify features as a data frame ahead of time

  data_min <- data[, use_features] %>% data.frame()

...(建模代码,包括列车功能和所需输出)......

}

我还没有试过做一个lapply而不是for循环 . 我很感激任何提高效率的建议 .