Можно ли провести перекрестную проверку и сохранить перекрестную проверку модели с помощью 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
)

но даже с этим вариантом prediction = T вы просто получаете результаты прогноза из ваших тренировочных данных. Я не вижу способа использовать полученный объект (clf в этом примере) в predict выписка с новыми данными.

Точное ли у меня понимание и есть ли обходной путь?

1 ответ

Я считаю, что ваше понимание является точным, и что нет никаких настроек, чтобы спасти модели от перекрестной проверки.

Для большего контроля перекрестной проверки вы можете потренироваться xgboost модели с caret (см. более подробную информацию о trainControl функция здесь http://topepo.github.io/caret/training.html)

Пока я не ошибаюсь, caret также отсутствует возможность сохранить каждую модель CV для последующего прогнозирования (хотя вы можете вручную указать показатели, по которым вы хотите их оценить). В зависимости от причины, по которой вы используете модели CV для прогнозирования новых данных, вы можете либо: 1) извлечь индексы моделей CV из окончательной модели, чтобы переучить эту конкретную модель (без перекрестной проверки, но с тем же начальным числом) на только это подмножество данных (из $control$index список внутри объекта, созданного caret"s 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) вручную проверить с помощью lapply или for цикл, чтобы сохранить все модели, которые вы создаете. createFolds семейство функций в caret полезный инструмент для выбора сгибов перекрестной проверки.

Другие вопросы по тегам