我使用插入符号包来建模和交叉验证
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 -fold,其中mtcars.am==0
的标准可以在创建indicies$test
时添加?
我想这应该行得通。只需为索引提供所需的行索引。
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参数是一个列表,因此您可以通过在索引中创建多个嵌套列表来为该列表提供尽可能多的迭代。
谢谢你的帮助。我最终通过修改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))