R中几乎所有的机器学习包/函数都允许您在训练模型时获得交叉验证性能指标。
据我所知,使用xgboost进行交叉验证的唯一方法是设置一个xgb.cv
语句,如下所示:
clf <- xgb.cv( params = param,
data = dtrain,
nrounds = 1000,
verbose = 1,
watchlist = watchlist,
maximize = FALSE,
nfold = 2,
nthread = 2,
prediction = T
)
但即使有CCD_ 2的选项,您也只是从训练数据中获得预测结果。我看不出有什么方法可以在带有新数据的predict
语句中使用结果对象(本例中为clf
)。
我的理解准确吗?周围有什么工作吗?
我相信您的理解是准确的,并且没有设置可以保存交叉验证中的模型。
为了更好地控制交叉验证,可以使用caret
训练xgboost
模型(请参阅此处的trainControl
函数的更多详细信息http://topepo.github.io/caret/training.html)
然而,除非我错了,否则caret
也没有保存每个CV模型以供以后预测的选项(尽管您可以手动指定要评估它们的指标)。根据您使用CV模型预测新数据的原因,您可以1)从最终模型中检索CV模型的索引,或者仅在该数据子集上(来自caret
的train
函数生成的对象内的$control$index
列表:
> library(MASS) # For the Boston dataset
> library(caret)
> ctrl <- trainControl(method = "cv", number = 3, savePred=T)
> mod <- train(medv~., data = Boston, method = "xgbLinear", trControl = ctrl)
> str(mod$control$index)
List of 3
$ Fold1: int [1:336] 2 3 4 6 8 9 13 14 17 19 ...
$ Fold2: int [1:338] 1 2 4 5 6 7 9 10 11 12 ...
$ Fold3: int [1:338] 1 3 5 7 8 10 11 12 14 15 ...
或2)手动与lapply
或for
循环交叉验证,以保存您创建的所有模型。caret
中的createFolds
函数族是选择交叉验证折叠的有用工具。