【发布时间】:2017-03-02 17:57:04
【问题描述】:
xgb.train 中的feval 和eval_metric 有什么区别,这两个参数仅用于评估目的。
来自 Kaggle 的帖子提供了一些见解:
【问题讨论】:
xgb.train 中的feval 和eval_metric 有什么区别,这两个参数仅用于评估目的。
来自 Kaggle 的帖子提供了一些见解:
【问题讨论】:
feval 是创建您自己的自定义评估指标。
eval_metric 用于 xgboost 包正在实施的内置指标。
rmse / logloss/ mlogloss/ merror/ error/ auc/ ndcg/ ...
【讨论】:
他们都做大致相同的事情。
Eval_metric 可以采用字符串(使用其内部函数)或用户定义的函数
feval 只接受一个函数
正如您所说,两者都是出于评估目的。
在下面的示例中,您可以看到它们的用法非常相似。
## A simple xgb.train example:
param <- list(max_depth = 2, eta = 1, silent = 1, nthread = 2,
objective = "binary:logistic", eval_metric = "auc")
bst <- xgb.train(param, dtrain, nrounds = 2, watchlist)
## An xgb.train example where custom objective and evaluation metric are used:
logregobj <- function(preds, dtrain) {
labels <- getinfo(dtrain, "label")
preds <- 1/(1 + exp(-preds))
grad <- preds - labels
hess <- preds * (1 - preds)
return(list(grad = grad, hess = hess))
}
evalerror <- function(preds, dtrain) {
labels <- getinfo(dtrain, "label")
err <- as.numeric(sum(labels != (preds > 0)))/length(labels)
return(list(metric = "error", value = err))
}
# These functions could be used by passing them either:
# as 'objective' and 'eval_metric' parameters in the params list:
param <- list(max_depth = 2, eta = 1, silent = 1, nthread = 2,
objective = logregobj, eval_metric = evalerror)
bst <- xgb.train(param, dtrain, nrounds = 2, watchlist)
# or through the ... arguments:
param <- list(max_depth = 2, eta = 1, silent = 1, nthread = 2)
bst <- xgb.train(param, dtrain, nrounds = 2, watchlist,
objective = logregobj, eval_metric = evalerror)
# or as dedicated 'obj' and 'feval' parameters of xgb.train:
bst <- xgb.train(param, dtrain, nrounds = 2, watchlist,
obj = logregobj, feval = evalerror)
【讨论】: