2016-04-09 4 views
-1

Практически все пакеты/функции машинного обучения в R позволяют получать показатели эффективности перекрестной проверки при обучении модели.Можно ли перекрестно проверять и сохранять перекрестно проверенную модель с помощью xgboost (xgb.cv) в 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 с новыми данными.

Насколько я понимаю, есть ли какие-либо проблемы?

+0

Комментарий к нисходящей линии будет оценен так, чтобы я мог лучше сделать пост. –

+0

Не путник, но не ответ будет просто «xgb.save (bst,« xgboost.model »)' где bst - результат из 'xgb.train()', а затем загружать и прогнозировать с помощью нового набора данных? Сохранение результатов перекрестной проверки не кажется полезным для моего понимания ваших целей. –

ответ

1

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

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

Но если я не ошибаюсь, 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) вручную перекрестная проверка с lapply или for петлей, чтобы сохранить все модели вы создаете. Семейство функций createFolds в caret - полезный инструмент для выбора скрещиваний перекрестной проверки.

+0

Спасибо за ваш ответ. Я просто пытаюсь получить * * модель, которую я могу использовать для предсказания, а не конкретную для какой-либо конкретной сводки CV. Я просто не хочу удваивать время, которое я провожу для обучения. Фактически с помощью 'caret' почти все типы моделей предоставляют эту функциональность. Причина, по которой я не думал, что карет был решением, состоял в том, что последний раз, когда я проверил xgb, был реализован только с чрезвычайно ограниченными функциями. Кажется, они улучшили возможности настройки в прошлом году. Позвольте мне проверить это, и я могу отметить это как ответ в зависимости от того, что я нахожу. –