Пользовательская метрика ошибок, не изменяющая прогнозы XGBoost R

#python #r #xgboost

#python #r #xgboost

Вопрос:

Я создал пользовательскую метрику ошибок, которая печатается при запуске XGBoost xgb.train, но на самом деле никак не влияет на результат. Из того, что я могу сказать, это просто выводит пользовательскую метрику ошибок для раунда, но не использует ее для определения точности.

Я думаю это потому, что результаты прогнозирования точно такие же, как при использовании метрики ошибок по умолчанию. Я также пытался жестко закодировать вывод ошибки в статическое значение 1, чтобы вывод был случайным, но результат был точно таким же.

Нужно ли мне создавать пользовательскую целевую функцию для работы пользовательской метрики ошибок?

Спасибо!

Мой код:

 # xgboost fitting with arbitrary parameters
xgb_params_1 = list(
  objective = "reg:linear",                                               
  eta = 0.2,                                                       
  max.depth = 6,                                                      
  booster =  "gbtree"   
)


evalerror <- function(preds, dtrain) {
  labels <- getinfo(dtrain, "label")


  score <- as.numeric((sum(preds[1:1000]) - sum(labels[1:1000] )) / sum(labels[1:1000]) ) 

  return(list(metric="custom_error",value=1))

}


myWatch <- list(val=dvalid,train=dtrain)
# fit the model with the arbitrary parameters specified above
xgb_1 = xgb.train(data = dtrain,
                params = xgb_params_1,
                nrounds = 150,                                            
                nthread = 6,
                verbose = T,                                         
                print_every_n = 50,
                watchlist = myWatch,
                early_stop_round = 1000,                                                    
                eval_metric = evalerror,
                disable_default_eval_metric = 1

)

# Perform a prediction
pred <- predict(xgb_1, dvalid)
results <- cbind(as.data.table(pred), as.data.table(data[year > trainEndDate,"total_installs"]))


#Compute test RMSE
sqrt(mean((results$pred - results$total_installs)**2))
  

Напечатанные метрики ошибок:

введите описание изображения здесь

Ответ №1:

Пользовательская метрика ошибок eval_metric предназначена только для целей оценки. Она отображается в каждом раунде (при использовании часов) и полезна для настройки количества раундов повышения, и вы можете использовать ее при перекрестной проверке, чтобы настроить свои параметры для максимизации / минимизации вашей метрики. Я использую ее, в частности, для настройки скорости моего обучения, чтобы модель сходилась быстрее с меньшим количеством раундов.

Пользовательская целевая функция — это совершенно другой зверь, и это не то же самое, что метрика оценки. Это скорее тип модели, такой как классификация, регрессия и т.д. Это стимулирует сходимость модели. Если вы все еще хотите этого, вот пример цели регрессии xgboost.