是否可以将交叉验证的模型与xgboost(xgb.cv)交叉验证并保存在R中



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模型的索引,或者仅在该数据子集上(来自carettrain函数生成的对象内的$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)手动与lapplyfor循环交叉验证,以保存您创建的所有模型。caret中的createFolds函数族是选择交叉验证折叠的有用工具。

最新更新