r - 如何在 R 中使用 k-fold CV 手动训练数据?
问题描述
我有以下适用于我的代码段,我得到了模型结果:
library(base)
library(caret)
library(tidyverse)
dataset <- read_csv("https://gist.githubusercontent.com/dmpe/bfe07a29c7fc1e3a70d0522956d8e4a9/raw/7ea71f7432302bb78e58348fede926142ade6992/pima-indians-diabetes.csv", col_names=FALSE)
X = dataset[, 1:8]
Y = as.factor(ifelse(dataset$X9 == 1, 'diabetes', 'nondiabetes'))
set.seed(88)
nfolds <- 3
cvIndex <- createFolds(Y, nfolds, returnTrain = T)
fit.control <- trainControl(method="cv",
index=cvIndex,
number=nfolds,
classProbs=TRUE,
savePredictions=TRUE,
verboseIter=TRUE,
summaryFunction=twoClassSummary,
allowParallel=FALSE)
model <- caret::train(X, Y,
method = "svmLinear",
trControl = fit.control,
preProcess=c("center","scale"),
tuneLength=10)
使用它我可以访问最终模型model$finalModel
,但是,在这种情况下,我实际上希望拥有 3 个模型,而不是拥有一个最终模型,因为我有 3 倍。所以,我想在第一次折叠后得到训练好的模型,然后在第二次折叠后,最后在第三次折叠后,这对应于实际的最终模型。任何想法如何在 R 中实现这一目标?请注意,使用的caret
并不严格,如果你能做到这一点mlr
,也欢迎。
解决方案
插入符号中的训练功能简化了模型评估和训练 https://cran.r-project.org/web/packages/caret/vignettes/caret.html
“使用重采样评估模型调整参数对性能的影响,在这些参数中选择“最佳”模型,从训练集中估计模型性能”
因此,它给出的模型是最优的最终模型。没有理由使用在每个折叠上训练的模型。我不知道如何在 R 中执行此操作
推荐阅读
- r - 如何使用 R 中一列中的数据在第二列中创建新数据
- javascript - 我不知道为什么状态会这样更新?
- assembly - 指令中的 XOP 前缀是什么?
- multithreading - clojure reduce 函数使用所有内核,即使它似乎是单线程的
- c++ - QLibrary::load 失败,但 LD_LIBRARY_PATH 在此之前刚刚正确更新,为什么?
- c# - 如何在 C# 中创建一个在一个索引中具有单个元素而在另一个索引中具有另一个数组的数组?
- javascript - 数组对象未更新状态
- pytext - ImportError:无法从“pytext.config.serialize”导入名称“pytext_config_from_json”
- python - Python。将文件和文件夹复制到现有目录
- java - Spring数据JPA中的saveAndFlush