R语言xgboost自定义目标函数

要自定义xgboost的目标函数,有两种方式

  • 自定义目标函数(objective)
  • 自定义评价函数(feval)。

如果是自定义目标函数你需要求解该目标函数的梯度以及二阶梯度。
例子:自定义的objective

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))
}

而另一个则是自定义评价函数,参数:feval 。它的作用并不是用来训练,仅仅是用来评价,比如说,你可以使用logloss作为目标函数来训练,但是使用ks评分来评价,你可以根据这个评价来设计early stopping,或者调参。
例子:自定义的feval

evalerror <- function(preds, dtrain) {
  labels <- getinfo(dtrain, "label")
  err <- as.numeric(sum(labels != (preds > 0)))/length(labels)
  return(list(metric = "error", value = err))
}
param <- list(max_depth=2, eta=1, nthread = 2, silent=1,objective=logregobj, eval_metric=evalerror)
bst <- xgb.train(param, dtrain, num_round, watchlist)

一般我推荐使用第二种方法,也就是自定义feval的方法,不建议使用自定义 objective,因为首先,有的评分你根本没法求梯度,然后自己写的目标函数难免没有bug,有可能效果不是很好。

更详细自定义函数例子可以看:
https://github.com/dmlc/xgboost/blob/master/doc/parameter.md#learning-task-parameters

其他参考:
http://stackoverflow.com/questions/34178287/difference-between-objective-and-feval-in-xgboost

作为分享主义者(sharism),本人所有互联网发布的图文均遵从CC版权,转载请保留作者信息并注明作者a358463121专栏:http://blog.csdn.net/a358463121,如果涉及源代码请注明GitHub地址:https://github.com/358463121/。商业使用请联系作者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值