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

时间:2017-04-27 06:52:27

标签: r xgboost

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

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

根据我对xgboost的了解 - 当增强开始构建树时,目标函数在所有树组合时最终迭代地实现最佳性能。

由于班级不平衡导致我的数据,我面临Accuracy Paradox的问题。在模型的最后,我可以实现很棒accuracy precisionrecall

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

  

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

1 个答案:

答案 0 :(得分:4)

我不是这方面的专家,但我认为这个评估指标应该起到作用:

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

<强> 参考文献:

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

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