Отчет о производительности модели XGBoost по данным проверки

#r #logging #xgboost

#r #ведение журнала #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 и test xgb.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

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

Ответ №1:

По-видимому, отчеты о производительности тестового набора данных могут быть выполнены только с использованием xgb.train() not with 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)