首页 > 解决方案 > 如何在 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,也欢迎。

标签: rmachine-learningcross-validationr-caret

解决方案


插入符号中的训练功能简化了模型评估和训练 https://cran.r-project.org/web/packages/caret/vignettes/caret.html

“使用重采样评估模型调整参数对性能的影响,在这些参数中选择“最佳”模型,从训练集中估计模型性能”

因此,它给出的模型是最优的最终模型。没有理由使用在每个折叠上训练的模型。我不知道如何在 R 中执行此操作


推荐阅读