自定义目标函数来优化 Fscore - XGBOOST

Kar*_*epu 5 r xgboost

我正在尝试对xgboost具有不平衡类(1% 的 1% 和 99% 的零)的分类数据实施。

binary:logistic用作分类的目标函数。

根据我的知识xgboost- 随着 boosting 开始构建树,当所有树组合在一起时,目标函数会被迭代优化,最终实现最佳性能。

在我的数据中,由于类不平衡,我面临着Accuracy Paradox的问题。凡在我能够实现大的模式的终结accuracy,但穷人 precisionrecall

我想要一个可以优化模型并返回具有 best 的最终 xgboost 模型的自定义目标函数f-score。或者我可以使用任何其他可以最好返回的目标函数f-score吗?

其中F-Score = (2 * Precision * Recall)/(Precision + Recall)

小智 5

我不是这方面的专家,但我认为这个评估指标应该可以做到这一点:

f1score_eval <- function(preds, dtrain) {
  labels <- getinfo(dtrain, "label")

  e_TP <- sum( (labels==1) & (preds >= 0.5) )
  e_FP <- sum( (labels==0) & (preds >= 0.5) )
  e_FN <- sum( (labels==1) & (preds < 0.5) )
  e_TN <- sum( (labels==0) & (preds < 0.5) )

  e_precision <- e_TP / (e_TP+e_FP)
  e_recall <- e_TP / (e_TP+e_FN)

  e_f1 <- 2*(e_precision*e_recall)/(e_precision+e_recall)

  return(list(metric = "f1-score", value = e_f1))
}
Run Code Online (Sandbox Code Playgroud)

参考:

https://github.com/dmlc/xgboost/issues/1152

http://xgboost.readthedocs.io/en/latest/parameter.html

  • 问题是针对 OBJECTIVE 函数,而不是针对 EVALUATION 函数 (4认同)