我创建了一个自定义错误指标,在我运行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))
印刷错误指标:
自定义eval_metric
仅用于评估目的。它会在每一轮(使用手表时)显示,并且调整增强轮的数量很有用,您可以在进行交叉验证时使用它来调整参数以最大化/最小化您的指标。我特别使用它来调整我的学习率,使模型以更少的轮数更快地收敛。
自定义目标函数是一种完全不同的野兽,它与评估指标不同。它更像是一种类型的模型,如分类,回归等。它驱动模型的收敛。如果你仍然想要它是xgboost regression objective的一个例子。