r - R中的k-fold嵌套重复交叉验证
问题描述
我需要进行四重嵌套重复交叉验证来训练模型。我编写了以下代码,它具有内部交叉验证,但现在我正在努力创建外部。
fitControl <- trainControl(## 10-fold CV
method = "repeatedcv",
number = 10,
## repeated five times
repeats = 5,
savePredictions = TRUE,
classProbs = TRUE,
summaryFunction = twoClassSummary)
model_SVM_P <- train(Group ~ ., data = training_set,
method = "svmPoly",
trControl = fitControl,
verbose = FALSE,
tuneLength = 5)
我试图解决这个问题:
ntrain=length(training_set)
train.ext=createFolds(training_set,k=4,returnTrain=TRUE)
test.ext=lapply(train.ext,function(x) (1:ntrain)[-x])
for (i in 1:4){
model_SVM_P <- train(Group ~ ., data = training_set[train.ext[[i]]],
method = "svmRadial",
trControl = fitControl,
verbose = FALSE,
tuneLength = 5)
}
但它没有奏效。我该怎么做这个外循环?
解决方案
该包已在函数rsample
中实现了外循环,请参阅文档。nested_cv()
要评估由 nested_cv 训练的模型,请查看此小插图,它显示了“繁重”的完成位置:
# `object` is an `rsplit` object in `results$inner_resamples`
summarize_tune_results <- function(object) {
# Return row-bound tibble that has the 25 bootstrap results
map_df(object$splits, tune_over_cost) %>%
# For each value of the tuning parameter, compute the
# average RMSE which is the inner bootstrap estimate.
group_by(cost) %>%
summarize(mean_RMSE = mean(RMSE, na.rm = TRUE),
n = length(RMSE),
.groups = "drop")
}
tuning_results <- map(results$inner_resamples, summarize_tune_results)
此代码将tune_over_cost
函数应用于训练数据的每个超参数和拆分(或折叠),这里称为“评估数据”。
请查看小插图以获取更多有用的代码,包括并行化。
推荐阅读
- vue.js - 以网格模式显示组件。Vue.js
- python - 路径不匹配
- ios - 如何缩小视频文件大小(swift 5)
- java - 无法通过 ToolProvider 找到 jpackage
- spring - 是否可以使用 Spring Boot 后端创建 Cordova 应用程序?
- finite-element-analysis - 实现3D弹性膜元件的c++ FEM库
- c# - 如果在不更改类类型的情况下出错,则在 int 类中重定向
- reactjs - 带有 jest 和 react-testing-library 的测试方法
- python - 当我只使用 tkinter 输入一个输入框时,为什么我所有的输入框都会编辑?
- delphi - Firemonkey - 物体检测