2016-10-20 11 views

ответ

3

Они оба делают примерно то же самое.

Eval_metri с может принимать строку (использует свои внутренние функции) или определенные пользователем функции

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) 

https://github.com/dmlc/xgboost/blob/72451457120ac9d59573cf7580ccd2ad178ef908/R-package/R/xgb.train.R#L176

1

feval это, чтобы создать свой собственный индивидуальный показатель оценки. eval_metric если для встроенных метрик реализуется пакет xgboost.