#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.