1

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
)

但即使有这个选项,prediction = T你也只是从你的训练数据中得到预测结果。我看不到在包含新数据的语句中使用结果对象(clf在本例中)的方法。predict

我的理解是否准确,是否有任何解决方法?

4

1 回答 1

2

我相信您的理解是准确的,并且没有设置可以从交叉验证中保存模型。

为了更好地控制交叉验证,您可以训练xgboost模型(在此处查看函数caret的更多详细信息http://topepo.github.io/caret/training.htmltrainControl

然而,除非我弄错了,否则caret也缺少保存每个 CV 模型以供以后预测的选项(尽管您可以手动指定您希望评估它们的指标)。根据您使用 CV 模型预测新数据的原因,您可以 1)从最终模型中检索 CV 模型的索引,以重新训练该特定模型(没有交叉验证,但使用相同的种子)只是数据的那个子集(来自由函数$control$index产生的对象内caret的列表train

> 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循环以保存您创建的所有模型。中的createFolds函数族caret是选择交叉验证折叠的有用工具。

于 2016-04-09T23:21:55.287 回答