2016-10-10 7 views
0

Я хочу использовать функциональность XGBoost early.stop.round для обучения без переутомления. Для этого я использую следующий код:Отчет о производительности модели XGBoost по данным валидации

param2 <- list("objective" = "reg:linear", 
        "eval_metric" = "rmse", 
        "max_depth" = 15, 
        "eta" = 0.03, 
        "gamma" = 0, 
        "subsample" = 0.5, 
        "colsample_bytree" = 0.6, 
        "min_child_weight" = 5, 
        "alpha" = 0.15) 

    watchlist <- list(train = xgb.DMatrix(data = train_matrix, label = output_train), 
        test = xgb.DMatrix(data = total_matrix[ind, ], label = as.matrix(output_total[ind, ]))) 

    bst <- xgboost(data=train_matrix, label=output_train, nrounds = 500, watchlist = watchlist, 
         early.stop.round=5,verbose = 2, param=param2, missing = NaN) 

Так как требуется создать train и testxgb.DMatrix для наблюдения, и передать его в xgboost(). Я убедился, что verbose есть для печати промежуточных результатов. Но с verbose=2 я получаю войти как:

tree prunning end, 1 roots, 1692 extra nodes, 0 pruned nodes ,max_depth=15 
[74] train-rmse:0.129515 
tree prunning end, 1 roots, 1874 extra nodes, 0 pruned nodes ,max_depth=15 
[75] train-rmse:0.128455 
tree prunning end, 1 roots, 1826 extra nodes, 0 pruned nodes ,max_depth=15 
[76] train-rmse:0.127804 
tree prunning end, 1 roots, 1462 extra nodes, 0 pruned nodes ,max_depth=15 
[77] train-rmse:0.126874 
tree prunning end, 1 roots, 1848 extra nodes, 0 pruned nodes ,max_depth=15 
[78] train-rmse:0.125914 

в то время как с verbose=1 дает мне:

[74] train-rmse:0.129515 
[75] train-rmse:0.128455 
[76] train-rmse:0.127804 
[77] train-rmse:0.126874 
[78] train-rmse:0.125914 

Но все это не дает мне модели производительности на каждом шаге для тестового DMatrix. Я также попытался без успеха:

  1. verbose=T и verbose=F.
  2. изменения имени test DMatrix в validation

Что мне не хватает, чтобы получить желаемый результат.

ответ

0

Видимо тестовый набор данных может быть выполнен только с использованием xgb.train() не с xgboost(). Соответствующий модифицированный код (не копирование param, часть выше) выглядит следующим образом:

dtrain <- xgb.DMatrix(data = train_matrix, label = output_train) 
    dtest <- xgb.DMatrix(data = total_matrix[ind, ], label = as.matrix(output_total[ind, ])) 
    watchlist <- list(train = dtrain, test = dtest)  
    bst <- xgb.train(data= dtrain, nrounds = 500, watchlist = watchlist, 
         prediction = T, early.stop.round=5,verbose = 1, param=param2, missing = NaN) 

 Смежные вопросы

  • Нет связанных вопросов^_^