我使用R包装器进行XGBoost。在函数 xgb.cv 中,有一个带有描述的folds
参数
列表提供了使用预定义CV折叠列表的可能性 (每个元素必须是折叠索引的向量)。如果是折叠 提供,nfold和分层参数将被忽略。
那么,我是否只是指定训练模型的指数并假设其余的将用于测试?例如,如果我的训练数据类似于
Feature1 Feature2 Target
1: 2 10 10
2: 7 1 9
3: 8 2 3
4: 8 10 7
5: 8 2 9
6: 3 7 3
我希望使用((1,2,3),(4,5,6))和((4,5,6),(1,2,3)使用(训练,测试)指数进行交叉验证))我设置folds=list(c(1,2,3), c(4,5,6))
?
答案 0 :(得分:2)
通过一些试验和错误,我发现xgboost
正在使用传递的索引作为 test 折叠的索引。通过注意xgboost
的当前开发版本明确指出documentation来确认这一点。
答案 1 :(得分:2)
以下是生成折叠并使用它们的示例。
假设在我们的数据框中我们有一列id,这样我们就想把所有具有给定id值的行放在一个折叠中。
以下代码
迭代id,创建匹配
的行索引列表
fold.ids <- unique(df$id)
custom.folds <- vector("list", length(fold.ids))
i <- 1
for( id in fold.ids){
custom.folds[[i]] <- which( df$id %in% id )
i <- i+1
}
以下是使用xgb.cv
res <- xgb.cv(param, dtrain, nround, folds=custom.folds, prediction = TRUE)
其他xgb.cv
参数的合理值可以是found in the documentation
答案 2 :(得分:1)
这对我来说效果最好:
custom.folds <- caret::createFolds(data$Label, k=10, list=T)
xgbcv <- xgb.cv(
params = params
,data = df
,maximize = F
,prediction = T
,metrics = "logloss"
,folds = custom.folds
)