Можно ли провести перекрестную проверку и сохранить перекрестную проверку модели с помощью 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
полезный инструмент для выбора сгибов перекрестной проверки.